Einzelne Koordinaten in einm Kreis !
-
Wie kann ich die einzelnen Koordinaten in einem Kreis rausbekommen ?
Antwort am besten in einer für 9te Klässler Gymnasium verständlich Form , ist aber nicht notwendig .
-
In dem du einen Einheitsvektor mit einer Drehmatrize multiplizierst.
Bye, TGGC (Fakten)
-
im 2d:
die Koordinaten x,y
mit
r - Radius
mx,my - Mittelpunkt
(x-mx)2+(y-my)2=r^2
Polar
x = rcos(alpha) + mx;
y = rsin(alpha) + my;
-
ok , war nicht ganz , was ich meinte
Ich habe gedacht , es gäbe eine Möglichkeit , Alle Koordinaten rauszubekommen
-
RobthaR schrieb:
ok , war nicht ganz , was ich meinte
Ich habe gedacht , es gäbe eine Möglichkeit , Alle Koordinaten rauszubekommen
Sollte schwer werden, da ein Kreis unendlich viele Punkte hat...
-
Ja klar , hab mich undeutlich ausgedrückt
Ich meinte auch nur Koordinaten ohne Komma
-
RobthaR schrieb:
Ja klar , hab mich undeutlich ausgedrückt
Ich meinte auch nur Koordinaten ohne Komma
lol
-
Die kannst du dir auch in einer Schleife sammeln:
for x=mx-r to mx+r y=sqrt(r[h]2[/h]-(x-mx)[h]2[/h]) if y ist Ganzzahl points.push_back(x,my+y) points.push_back(x,my-y) endif endfor
(am Ende hast du in der Liste 'points' alle "passenden" Punkte des Kreises)
-
was ist point.push_back für ne Anweisung ?
-
b7f7 schrieb:
im 2d:
die Koordinaten x,y
mit
r - Radius
mx,my - Mittelpunkt
(x-mx)2+(y-my)2=r^2
Polar
x = rcos(alpha) + mx;
y = rsin(alpha) + my;@RobthaR: Mir ist immer noch nicht ganz klar, was du willst. Was sind "Koordinaten ohne Komma"? Meinst du alle Koordinaten, die sich durch ganze Zahlen {...-2,-1,0,1,2..} daretllen lassen? Wofür brauchst du das alles?
Ich erklär dir noch mal b7f7 Posting:
Alle (x,y), die die Gleichung (x-mx)^2 + (y-my)^2 = r^2 erfüllen, liegen auf dem Kreis mit dem Mittelpunkt (mx,my) und dem Radius r.
Die Koordinaten des selben Kreises kannst du dir alle ausrechnen, in dem du
in die beiden Formelnx = r*cos(alpha) + mx; y = r*sin(alpha) + my;
alle Winkel alpha von 0° bis 360° einsetzt. Du "läufst" dabei einmal um den Kreis herum.
Zum selber austeste: Denk dir mal zehn verschiedene Winkel für alpha aus und nimm irgendwelche Zahlen für r und mx,my (z.b. Radius = 1 und Mittelpunkt = (0,0)). Mal die in ein Koordinatensystem. Setz die Zahlen auch mal in die Gleichung (x-mx)^2 + (y-my)^2 = r^2 ein, und schau, ob sie aufgeht. Setz mal Zahlen für x und y in die Gleichung ein, die nicht auf dem Kreis liegen.
Du kannst auch probieren, einen anderen Radius und einen anderen Mittelpunkt zu wählen und dann das ganze noch mal zu machen.Hattet ihr in der Schule schon den Satz des Pythagoras? Wie stehts mit sin(x) und cos(x)?
edit: mit push_back meint er nur, dass er die Koordniaten speichern (in einem Vektor/einer Liste/einem Array oder wasauchimmer) will.
-
Danke für die Erklärung , mir ist einiges klarer geworden
Taurin schrieb:
Wofür brauchst du das alles?
Für Lichtberechnung in einem 2D Spiel (möcht ja keine eckigen lichter )
Ist ganz richtig , ich brauch ja Ganzzahlige Koordinaten für die Darstellung, aber (achtung , unwichtiger Text)Geistesblitz : alle Koordinaten die ( bei der Berechnung des Lichtes) kleiner als die berechnende (Koordinate1 + 1) und (Koordinate2 + 1) und größer als Koordinate1 und Koordinate2 sind werden mit einem Lichtwert(der der Helligkeit und Entfernung zur Quelle entspricht) versehen und dann alle zusammengefasst und durch die anzahl geteilt , und was vermasselt diesen
RobthaR schrieb:
Geistesblitz
die Ganzzahlen , uff
gibts in C++ eine Möglichkeit , Kommazahlen in Ganzzahlen umzuwandeln
(Dieser Text sollte die Verzweiflung über Ganz- und Kommazahlen verdeutlichen)
-
Willst du alle Punkte IM KREIS oder AUF DEM RADIUS für die x Element Z und y Element Z ist herausbekommen?
Ciao Tommy
-
wahrscheinlich brauchst du alle Punkte, die drinne liegen?!
Kreisgleichung = (x+mx)² + (y+my)² = r
ich sehe nur gerade, dass ich noch nen float für alle werte habe... naja.. kannste ja auch noch umschreiben, aber so sollte es eigtl funzen, kann es nur gerade ne probieren...
float r = {radius}; float mx = {Mittelpunktwert (x-Koordinate)}; float my = {Mittelpunktwert (y-Koordinate)}; float zwischenergebnis = r - my*my - mx*mx; for (int i = mx - r; i < mx + r; i++) { float ze2 = i*i + 2i*mx; for (int j = my - r; j < my + r; j++) { if (ze2 + j*j + 2j*my == zwischenergebnis) { // Punkt liegt im Kreis } else { //Punkt liegt außerhalb des Kreises } } }
Erklärung zur Funktionsweise:
es werden alle punkte, die in dem quadrat um den mittelpunkt mit der seitelänge 2*r durchprobiert, ob sie im Kreis oder nicht liegen...Weiß nicht genau, ob ich dir damit weiterhelfen konnte, aber ich hoffe es mal!
Ciao Tommy
-
ich IDIOT!
"if (ze2 + j*j + 2j*my == zwischenergebnis)" damit guckst du, ob die auf dem Radius liegen...
"if (ze2 + j*j + 2j*my <= zwischenergebnis)" damit guckst du, ob die in dem Kreis oder auf dem Radius liegen...Ciao Tommy
PS: Gib mal Laut, ob das so passt oder ob ich dich falsch verstanden habe!?
-
Ich verstehe nicht ganz , welche Punkte es sind , die innrehalb des Kreises liegen wed es jetzt aber mit dem Satz des Pythagoras ausprobieren , ist zwar mehr zu berechnen , aber ich habe nicht so viele Floats , die mehr Speicherplatz vollstopfen .
Auf der Zielplattform ist nicht sehr viel Speicher frei ...