Einzelne Koordinaten in einm Kreis !



  • 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 = r
    sin(alpha) + my;

    http://de.wikipedia.org/wiki/Kreis_(Geometrie)

    @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 Formeln

    x = 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 ...


Anmelden zum Antworten