Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

13.07.2011, 15:43

Kreisberechnung

Hallo Community

Ich habe eine schöne Schlaufe gefunden, welche mir die Punkte eines Kreises berechnet. Gegeben ist der Mittelpunkt und der Radius.

1. Problem: Ich verstehe diese Schlaufe nicht wirklich, was wird darin berechnet? Kann mir das jemand erklären??

2. Problem: Bis jetzt konnte ich nur Kreise im 2D - Raum berechnen, also Z hatte bis jetzt immer einen fixen Wert. Wie kann ich das ändern??


Hier noch die schlaufe:

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
int anzahlSegmente = 24;
float mitte_x = 0;
float mitte_y = 0;
float mitte_z = 0;
float radius = 200;

for (int i = 0; i < anzahlSegmente ; i++)
{
    float p_x = mitte_x + (float)Math.Cos(2 * Math.PI * i / anzahlSegmente ) * radius ;
    float p_y = mitte_y + (float)Math.Sin(2 * Math.PI * i / anzahlSegmente ) * radius ;
    float p_z = mitte_z;
}


Danke und Gruss
Master Chief

2

13.07.2011, 15:54

1. Problem: Ich verstehe diese Schlaufe nicht wirklich, was wird darin berechnet? Kann mir das jemand erklären??


Du sagst es ja selbst: Es werden Punkte berechnet, die auf dem Kreis liegen bzw. genauer gesagt auf einem Vieleck. Die Anzahl der Schleifendurchgänge (anzahlSegmente) bestimmt also wie viele Punkte berechnet werden. Je mehr berechnet werden, desto kleiner die Abstände zwischen zwei Punkten, um so mehr Eckpunkte hat dein Vieleck und je mehr Eckpunkte es hat desto näher kommt es an einen Kreis ran. Dafür wird vom Mittelpunkt ausgegangen und dann immer ein bestimmter Betrag zu dessen x- und y-Koordinate dazugerechnet. Das macht man mit einfacher Trigonometrie.

Siehe hier:

(Link)



2. Problem: Bis jetzt konnte ich nur Kreise im 2D - Raum berechnen, also Z hatte bis jetzt immer einen fixen Wert. Wie kann ich das ändern??


Gar nicht! Kreise sind immer 2-dimensional, liegen also immer in einer Ebene, sodass immer eine der drei Raum-Koordinaten konstant ist (wenn man das Koordinatensystem so legt, dass die Ebene eine der Koordinatenebenen ist). Andernfalls handelt es sich um eine Kugel. Dazu gibt es aber dann auch eine Kugelgleichung.

Gruß
SaRu_

3

13.07.2011, 16:01

Ach so, danke, Mein 1. Problem ist nun gelöst.

Zum 2. Problem, ich glaube du hast mich falsch verstanden =)

Es geht mir darum, einen einfachen kreis (Abfolge von Punkten) in einem 3-D Raum darzustellen.
So kann es sein, das der Kreis komplett schräg im Raum steht, dadurch ist meiner Meinung nach kein Koordinatenpunkt immer Konstant.

Hoffe mein Problem ist klar =)
Danke

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

4

13.07.2011, 16:02

Gar nicht! Kreise sind immer 2-dimensional, liegen also immer in einer Ebene, sodass immer eine der drei Raum-Koordinaten konstant ist (wenn man das Koordinatensystem so legt, dass die Ebene eine der Koordinatenebenen ist)


Allerdings kann die Kreisebene beliebig im R3 liegen.
@D13_Dreinig

5

13.07.2011, 16:07

Ja da habt ihr natürlich recht. Ich wollte damit eigentlich sagen, dass es sich wieder nur um eine Ebene handelt und man diese als 2D-Koordinatensystem behandeln kann um den Kreis zu zeichnen.

Entschuldigt bitte, war wohl nicht so ganz rübergekommen.

Gruß
SaRu_

6

13.07.2011, 16:31

Kein Problem =) Dir sei verziehen :D

Aber, wie berechne ich jetzt diese Koordinaten?? Kannst du mir da weiterhelfen??
Vielleicht stehe ich auch nur auf dem Schlauch..

Danke

7

13.07.2011, 16:49

Hallo

Mir ist etwas eingefallen.

Könnte ich das nicht so lösen, in dem ich gleich wie oben beschrieben, die Kreispunkte berechne und anschliessend die erhaltenen Punkte mit einer Rotations - Matrix multipliziere. Die Matrix erhalte ich, in dem der Benutzer die Drehung um jede Achse angeben muss??

Was haltet ihr von dieser Idee??

8

13.07.2011, 16:58

/edit: *hust* also genau wie dein Vorschlag das hier. Ich finde dein Vorschlag gut (um auf deine Frage zurückzukommen). Da du ja selbst drauf gekommen bist braucht du auch wahrscheinlich die links hier nicht.... Wikipedia geht grad nicht btw, recht nervig wenn man mal was nachgucken muss....


Vorschlag 1: Zeichne wie gewohnt deinen Kreis 2D in eine 2D Ebene in einen 3D-Raum (alle z-Koordinaten=0) und dann drehe dir das ganze so wie es dir passt: http://de.wikipedia.org/wiki/Drehmatrix

Da findest du "Drehmatrizen". Drehmatrizen sind so dinger, wenn du die Punkte deines Kreises damit multiplizierst ist der Kreis anschließend gedreht.

Eigentlich ganz einfach also: Kreis berechnen, Punkte merken, mit Matrix multiplizieren. Wie man Punkte mit einer Matrix multipliziert findest du hier: http://oberprima.com/mathenachhilfe/matrizenmultiplikation/ oder halt auch in Wikipedia.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

9

13.07.2011, 17:11

Oder man hat einfach beide Achsen-Vektoren und multipliziert diese mit Sin und Cos wie im 2D-Fall. Simpel und effektiv. Eine Matrix braucht man da auch nicht.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

10

13.07.2011, 17:20

Oder man hat einfach beide Achsen-Vektoren und multipliziert diese mit Sin und Cos wie im 2D-Fall. Simpel und effektiv. Eine Matrix braucht man da auch nicht.


Kannst du mir das näher erläutern?? Was meinst du mit Achsen-Vektoren??

Werbeanzeige