Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Kreis im Koordinatensystem

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Jan



Anmeldungsdatum: 04.01.2005
Beiträge: 74

BeitragVerfasst am: 23.04.2005, 19:30    Titel: Kreis im Koordinatensystem Antworten mit Zitat

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. mit dem Kopf durch die Mauer wollen weinen

BItte um Hilfe! Danke
[/code]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
ChemicalWarfare



Anmeldungsdatum: 15.09.2004
Beiträge: 152

BeitragVerfasst am: 23.04.2005, 19:54    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jan



Anmeldungsdatum: 04.01.2005
Beiträge: 74

BeitragVerfasst am: 23.04.2005, 21:50    Titel: Antworten mit Zitat

danke, das müsste klappen. grinsen grinsen

ich kann doch dann einfach, für winkel die werte 1 - 360 einsetzen, um die Punkte auf dem Kreisbogen zu beschreiben oder?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 23.04.2005, 23:34    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
stef



Anmeldungsdatum: 13.01.2005
Beiträge: 102

BeitragVerfasst am: 24.04.2005, 00:21    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
andyx



Anmeldungsdatum: 24.04.2005
Beiträge: 13

BeitragVerfasst am: 24.04.2005, 18:56    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jan



Anmeldungsdatum: 04.01.2005
Beiträge: 74

BeitragVerfasst am: 25.04.2005, 15:52    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 25.04.2005, 17:12    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 25.04.2005, 21:32    Titel: Antworten mit Zitat

Hallo

Das Thema Kugel und 3-D hatten wir schon: http://forum.qbasic.at/viewtopic.php?t=663

Gruss
Skilltronic
_________________
Elektronik und QB? www.skilltronics.de !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz