C Was fehlt mir zur richtigen Erfüllung der Aufgabe ?

Status
Für weitere Antworten geschlossen.

DieAnfängerin

Cadet 1st Year
Registriert
Okt. 2015
Beiträge
9
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....


Und das alles als Code...dabei bekomm ich die Aufgabe auch nicht als Rechnung hin...
 
Geht das nicht irgendwie mit Pythagoras? Jeder Punkt hat doch eine X und Y Wert und bildet mit dem Nullpunkt ein Dreieck. Daraus lässt sich eine Diagonale vom Nullpunkt zum Punkt berechnen. Je nachdem wie lange diese Gerade ist, ist der Punkt innerhalb (Länge <1), genau drauf(=1), oder außerhalb(>1).

Beispiel: Koordinate (5|3)

c^2=5^2+3^2
C=5,83

Also außerhalb
 
Hallo,

ist das eine Schulaufgabe? Denn eigentlich ist das nicht sonderlich kompliziert. Ich möchte dir aber nicht alles verraten, da du tendenziell mehr dabei lernst, wenn du selbst darauf kommst. Als erstes vom rein analytischen Rechnen her würde ich dir raten, den Abstand des Punkts vom Ursprung (x=0,y=0) mit Hilfe des Satzes von Pythagoras zu bestimmen. Diesen Abstand kannst du dann mit dem Radius des Kreises vergleichen, um die von dir geforderte Entscheidung zu treffen.

Wichtig ist hierbei jedoch auf der Programmierseite die Frage, ob man mit Fließkommazahlen zu tun hat, da bei diesen ein einfacher Vergleich mit "==" für den Fall, dass der Punkt auf dem Kreis liegt eher nicht zielführend ist und vielleicht eine gewisse Toleranz eingebaut werden sollte, um Rundungs"fehlern" zu begegnen.

Ich hoffe, das hilft dir erstmal weiter.
 
Der Abstand zum Nullpunkt ist doch genau die Eigenschaft. Und den kann man relativ einfach berechnen (z.B.).
 
Ich glaube dass ist wieder die gleiche Formel wie bei der ersten Aufgabe:

c² = a² + b²

du berechnest das wieder genau gleich wie bei der ersten und dann vergleichst du die distance variabel (aus deinem Programm) mit 1. Führst eine zusätzliche variabel ein und wenn distance variabel > 1 dann wird der neuen Variabel der Wert 1 zugewiesen, wenn distance variabel =1 dann wird der neuen variabel der Wert 0 zugewiesen und wenn distance variabel <1 dann wird der variabel -1 zugewiesen.
Und dann am Ende der Funktion wieder return neue variabel

Genau wie Vorredner das schrieb bei vergleich distance variable == 1 schreibst du stattdessen der Betrag von (distance variable -1) < 0.01 oder so um Rundungsfehler auszuschließen die betragsfunktion musst ud halt bei math nachschauen.
 
Zuletzt bearbeitet:
DieAnfängerin schrieb:
Oh und ich dachte an Pi o-o
Ja ich bin sehr in eingerostet in Mathe aber vielen Dank

Pi brauchst Du nur, wenn Du den Kreis/Kugel explizit in eine n-dimensionale Geometrie verfrachtest (z. B. Ebene) und bestimmte Maße bezüglich dieser Geometrie haben willst, so lange Du implizit (in Kreis/Kugelkoordinaten) bleibst, kommst Du meist ohne Pi davon ...

Aber hier geht es ja eben gar nicht um einen expliziten Kreis sondern nur um den Abstand von einem Punkt zu einem Anderen. Und alle Punkte gleichen Abstands von einem Punkt in der Ebene sind? Richtig: ein "Kreis". Aber der Kreis ist hier eben nicht eine "explizite Konstruktion" sondern eine "implizite Bedingung".
 
Zuletzt bearbeitet:
blöderidiot schrieb:
Pi brauchst Du nur, wenn Du den Kreis/Kugel explizit in eine n-dimensionale Geometrie verfrachtest (z. B. Ebene) und bestimmte Maße bezüglich dieser Geometrie haben willst, so lange Du implizit (in Kreis/Kugelkoordinaten) bleibst, kommst Du meist ohne Pi davon ...
Pi braucht man z.B., wenn man den Radius des Kreises kennt und den Umfang berechnen will. Was aber soll der mit einem expliziten Verfrachten in eine n-dimensionale Geometrie zu tun haben?
 
x²+ y²=1, damit musst du hantieren.
1 nur wenn der Radius auch 1 ist, ansonsten eine beliebige andere Zahl.

Code:
int r=1; //der Radius vom Kreis
if(x²+y²>r²)
{
//nicht im Kreis
}

else if(x2+ y2 <=r²)
{
//im oder auf dem Kreis
}
 
Zuletzt bearbeitet: ("²"-te vergessen)
Code:
return (x*x+y*y-1 > 0) (x*x+y*y-1 < 0)
Ist die kürzeste Version die mir einfällt. Man sollte aber vielleicht x*x+y*y-1 als Variable speichern...
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben