Frage von Sempiternal55, 18

Ich kann die mathematische Lösung bei der Programmierung nicht definieren, wer kann helfen?

Hallo,

ich habe eine Aufgabenstellung in der ich ein Unterprogramm, welches von der Tastatur zwei Koordinaten eines Punktes (x, y) einliest und dann bestimmt, ob sich dieser Punkt innerhalb oder außerhalb des Kreises mit Radius 1 um den Nullpunkt, oder genau auf dessen Rand ist. Liegt der Punkt innerhalb, dann soll das Unterprogramm den Wert - 1 zurückgeben. Liegt der Punkt genau auf dem Rand, dann soll das Unterprogramm den Wert 0 zurückgeben. Liegt der der Punkt außerhalb, dann soll das Unterprogramm den Wert +1 zurückgeben.

Bis jetzt habe ich folgenden Gedanke:

Wenn
     -1<x<1 und  -1<y<1
                             dann ist  P innerhalb.

Wenn
      x=0 muss y =1 oder = -1 sein
           oder y=0 muss -x =1 oder = -1 sein.

Jedoch habe ich den Kreis in ein Rechteck umgestellt....weil ich nicht weiß, wie ich diese Aufgabe in einem Kreis lösen soll....

Expertenantwort
von DepravedGirl, Community-Experte für Mathe, 12

Mittelpunkt M (x _ m|y _ m)

r = Radius

y = y _ m +/- √ (r ^ 2 - (x - x _ m) ^ 2)

Da dein Mittlepunkt M (0 | 0) lautet und dein Radius r = 1 , vereinfacht es sich zu

y = +/- √ (1 - x ^ 2)

---------------------------------------------------------------------------------------------------

INPUT x

INPUT y

Merke = 1

IF NOT (x  >= -1 AND x <= +1) OR NOT( y >= -1 AND y <= +1) THEN

Merke=0

ELSE

v = √ (1 - x ^ 2)

IF NOT(y = v)  AND NOT(y = -v) THEN Merke = 0

END IF

Wenn Merke am Ende dieser Prozedur immer noch den Wert Merke = 1 hat, dann weißt du, dass der Punkt auf dem Kreis liegt. Hat Merke den Wert Merke = 0, dann liegt der Punkt nicht auf dem Kreis.

ACHTUNG --> Hier gibt es ein Problem ! Manche Programmiersprachen rechnen mit 16 Stellen oder 32 Stellen nach dem Komma, intern sogar mit noch mehr, und das bedeutet, wenn die eingegebenen Werte x und y nicht bis auf extrem viele Stellen nach dem Komma exakt auf dem Erwartungswert liegen, dann wirst du aufgrund der extremen Empfindlichkeit trotzdem den Wert Merke = 0 bekommen, obwohl der Wert vielleicht nur um ein milliardstel vom echten Wert abweicht !!!

Deshalb solltest du die Zeile IF NOT(y = v)  AND NOT(y = -v) THEN Merke = 0 abändern, in eine Empfindlichkeit deiner Wahl.

Das kann dann so aussehen -->

IF NOT((y - v) < = eps)  AND NOT((y + v) < = eps) THEN Merke = 0

Selbstverständlich muss es dann im Programm auch ein INPUT eps geben, also -->

INPUT x

INPUT y

INPUT eps

Merke = 1

.

.

.

Kommentar von DepravedGirl ,

Das ist nur die Programmversion, wo geprüft wird, ob der Punkt exakt auf dem Kreis liegt !!!

Aber es sollte jetzt für dich nicht mehr allzu schwer sein, auch zu prüfen, ob der Punkt außerhalb oder innerhalb des Kreises liegt.

Außerhalb des Kreises liegt er, wenn √(x ^ 2 + y ^ 2) > 1 ist.

Innerhalb des Kreises liegt er, wenn √(x ^ 2 + y ^ 2) < 1 ist.

Kommentar von JupStrunk ,

ja, die Fließkommaungenauigkeit kann ein Problem ergeben...

Du kannst allerdings mit Integern rechnen und die Werte faktorieren !!!

wenn Du z.B. auf 3 Stellen hinter dem Komma genau rechnen willst nimmst Du die Werte mit 1000 Mal und entfernst dann die Nachkommastellen !!! ;)

z.B.: int(1000.0 * Wert1)

Kommentar von DepravedGirl ,

Ja, das ist auch eine Möglichkeit, du hast Recht.

Antwort
von JupStrunk, 14

der Kreis hat ja einen Mittelpunkt und einen Radius !!!
der Mittelpunkt wird auch durch Koordinaten bestimmt...
wenn Du jetzt vom Mittelpunkt zu deinen Koordinaten ein Dreieck zeichnest hat dieses die Seitenlängen deiner Koordinaten minus denen vom Kreismittelpunkt...

sagen wir mal wie üblich die Seiten im Dreieck sind a und b für die Katheten und c für die Hypothenuse...
Mx und My sind die Koordinaten des Kreismittelpunktes...
x und y sind deine Koordinaten...
dann währen:
a = Mx - x
b = My - y

jetzt mit dem Satz des Pythagoras c errechnen !!!

wenn c < Radius, dann im Kreis
wenn c = Radius, dann auf Kreis
wenn c > Radius, dann außerhalb Kreis

Kommentar von JupStrunk ,

Nachtrag:

das Ganze kannst Du auf einen Viertelkreis beschränken !!!
dazu prüfst Du, ob a und b negativ sind, und wenn ja machst Du sie positiv (a = a  * -1 bzw. b = b * -1)

Du kannst die nämlich auch so berechnen, kommt aber aufs gleiche Endergebnis aus...
a = x - Mx
b = y - My

Antwort
von Orney, 18

Benutze die dist() funktion bzw den Satz des Pythagoras:
If(dist(0, 0, x, y)) < 1
Und so

Antwort
von CrEdo85, 15

Denkanstoß: x^2 + y^2 = 1 (pythagoras)

Kommentar von Sempiternal55 ,

könnte ich bitte noch einen denkanstoß von ihnen haben (habe vorhin ein Programm mit Phythagoras geschrieben) aber diese Aufgabe bereitet mir auch bei der schriftlichen lösung, große Probleme...

Kommentar von CrEdo85 ,

wenn x^2 + y^2 < 1, dann ist P innerhalb vom kreis. wenn x^2 + y^2 = 1, dann genau auf dem kreis. bei x^2 + y^2 > 1 liegt P außerhalb vom kreis :)

Keine passende Antwort gefunden?

Fragen Sie die Community