 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Jan

Anmeldungsdatum: 04.01.2005 Beiträge: 74
|
Verfasst am: 23.04.2005, 19:30 Titel: Kreis im Koordinatensystem |
|
|
HI!
Ich bin zurzeit dabei, einen rotierenden Würfel zu programmieren.
Nun habe ich einen Kreis erstellt, der die Umlaufbahn darstellen soll.
Ich würde gern die einzelnen Koordinaten auf dem Kreis in einem Feld abspeichern, damit nacher, ein Punkt des Würfels diese annehmen kann.
NUn ist meine Frage, wie komme ich an die Koordinaten bei einem Kreis??
Also ich bräuchte die Koordinaten, der Punkte, die auf dem Kreisbogen liegen. Wie schaffe ich das???
Bsp.:
Code: |
screen 7
circle (100,100), 50, , , ,1
|
die eins steht da, damit ein gleichmäßiger Kreis entsteht.
ich habe das schon mit der POINT-Anweisung versucht, während des Zeichnes des Kreises, aber das funktioniert nicht.
BItte um Hilfe! Danke
[/code] |
|
Nach oben |
|
 |
ChemicalWarfare

Anmeldungsdatum: 15.09.2004 Beiträge: 152
|
Verfasst am: 23.04.2005, 19:54 Titel: |
|
|
Du kannst die Punkte mit sin und cos berechnen:
x = cos(winkel) * radius
y = sin(winkel) * radius
wenn mich nicht alles täuscht.
Wie Du den Winkel berechnest und den Radius, müßte Dir bekannt sein. |
|
Nach oben |
|
 |
Jan

Anmeldungsdatum: 04.01.2005 Beiträge: 74
|
Verfasst am: 23.04.2005, 21:50 Titel: |
|
|
danke, das müsste klappen.
ich kann doch dann einfach, für winkel die werte 1 - 360 einsetzen, um die Punkte auf dem Kreisbogen zu beschreiben oder? |
|
Nach oben |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 23.04.2005, 23:34 Titel: |
|
|
Nicht ganz, in QB benutzt man Bogenmaß.
Im Bogenmaß reichen die Winkel nicht von 0 bis 360, sondern von 0 bis 2*pi.
In der QB-Monster-FAQ müsste stehen, wie man Grad in Bogenmaß umwandelt.
Generell:
Code: |
const pi# = 3.141592654#
const deg2rad = pi# /360
degangle = 30
radangle = degangle * deg2rad
radangle = pi
degangle = degangle / deg2rad
|
Das funktioniert so weit, ist aber evtl nicht ganz genau. => Sieh in der QBMonFAQ nach, da stehen Möglichkeiten, pi wirklich genau zu berechnen.
Für die 3D-Programmierung eignen sich auch Matritzen. Diese kannst du recht einfach als FUNCTION implementieren.
Rotationsmatrix (2D):
Code: |
FUNCTION RotX (oldX AS SINGLE, oldY AS SINGLE, angle AS DOUBLE)
tmp = OldX * COS(angle) - OldY * SIN(angle)
RotX = tmp
END FUNCTION
FUNCTION RotY (oldX AS SINGLE, oldY AS SINGLE, angle AS DOUBLE)
tmp = OldX * SIN(angle) + OldY * COS(angle)
RotY = tmp
END FUNCTION
|
Leider weiß ich nicht, wie die 3D-Matrix aussieht. Evtl kannst du es aber als 2 2D-Rotationen darstellen... _________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
 |
stef
Anmeldungsdatum: 13.01.2005 Beiträge: 102
|
Verfasst am: 24.04.2005, 00:21 Titel: |
|
|
Nicht zu vergessen die Schöne Formel: Radius² = x² + y²
Wenn man also mit der Formel x = cos(winkel) * radius die x-Koordinate berechnet hat ist es besser die y Koordinate nicht mit dem Sinus zu berechnen sondern so:
y = SQR(radius * radius – x * x)
Und wenn man schon dabei ist sollten auch Symetrien beachtet werden und keine Berechnungen unnötig doppelt gemacht werden:
Wenn der Punkt P1(x1, y1) auf dem Kreis liegt, dann liegen auch die Punkte P2(x1, -y1), P3(-x1, y1) und P4(-x1, -y1) alle auf dem Kreis. Das spart Rechenzeit |
|
Nach oben |
|
 |
andyx
Anmeldungsdatum: 24.04.2005 Beiträge: 13
|
Verfasst am: 24.04.2005, 18:56 Titel: |
|
|
ave,
willst du deinen würfel orbital in alle richtungen drehen???
dann wäre es sicher sinnvoll, dem würfel eine kugel zu umschreiben;
dann kannst du dir überlegen, wie du die werte der einzelnen koordinaten der eckpunkte des würfels berechnen willst: entweder du machst es auf die "3-D-Variante"; soll heißen, du gibst dem rechner ensprechend die anweisungen in drei dimensionen zu rechnen oooooder: du berechnest alles "auf dem papier"; sozusagen in 2-d, ist zwar unprofessionell, aber der comp rechnet sich leichter damit...
greetings |
|
Nach oben |
|
 |
Jan

Anmeldungsdatum: 04.01.2005 Beiträge: 74
|
Verfasst am: 25.04.2005, 15:52 Titel: |
|
|
ich denke mal, die variante mit der Kugel wäre die richtige als Umlaufbahn,
aber wie komme ich daran??
ein Kreis is ja einfach, aber ne Kugel in 3D. ? Wie soll ich das denn anstellen? |
|
Nach oben |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 25.04.2005, 17:12 Titel: |
|
|
Du könntest deinen Kreis verzerren.
ChemicalWarfare hat Folgendes geschrieben: |
x = cos(winkel) * radius
y = sin(winkel) * radius
|
Wenn du jetzt jeweils noch ein "* Verzerrung" anhängst, bekommst du einen wunderbaren, geneigten kreis.
Verzerrung solltest aus SIN(Neigungswinkel) bekommen.
Code: |
CONST pi = 3.141592654#
const deg2rad = pi# /360
DIM bx AS SINGLE 'Bildschirmkoordinaten
DIM by AS SINGLE
DIM t AS DOUBLE
DIM rd AS SINGLE 'Radius
DIM nw AS SINGLE 'Neigungswinkel
DIM vz AS SINGLE 'Verzerrung
nw = 30 * deg2rad
vz = SIN(nw)
FOR t = 0 TO 2 * pi
x = COS(t) * rd
y = SIN(t) * rd * vz
PSET (x, y)
NEXT
|
Der Kreis ist damit natürlich in Z-Richtung geneigt. Wenn du willst, dass er in X-Richtung geneigt ist, musst du vz aus COS(nw) berechnen, und das "* vz" an x = ... anhängen.
Und Kombinieren kannst du beides natürlich auch:
Code: |
CONST pi = 3.141592654#
const deg2rad = pi# /360
DIM bx AS SINGLE 'Bildschirmkoordinaten
DIM by AS SINGLE
DIM t AS DOUBLE
DIM rd AS SINGLE 'Radius
DIM xnw AS SINGLE 'Neigungswinkel
DIM ynw AS SINGLE
DIM xvz AS SINGLE 'Verzerrung
DIM yvz AS SINGLE
SCREEN 12
rd = 50
xnw = 30 * deg2rad
ynw = 60 * deg2rad
xvz = COS(xnw)
yvz = SIN(ynw)
FOR t = 0 TO 2 * pi STEP .001
x = COS(t) * rd * xvz
y = SIN(t) * rd * yvz
PSET (x, y)
NEXT
|
Sollte hinhaun. Natürlich bekommst du so nur die Orbitale, Außerdem musst du den Kreis dann noch entsprechend verschieben.
Greets - Dusky Joe
Have a nice day _________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|