- Vectorrechnen , Kreis um Richtungs Vector quasi ein Zyl

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

Markus2

Betreff: - Vectorrechnen , Kreis um Richtungs Vector quasi ein Zyl

BeitragSo, Apr 04, 2004 18:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

also ich habe einen Richtungs Vector und am Ende muß ich einen
Kreis machen in 10 Grad Schritten was dann so aussieht wie ein Zylinder
aus Punkten oder Kugeln .

Also Formeln für Dot und Scalarprodukt habe ich ,
aber weiß jetzt nicht wie ich die anwenden muß Sad

z.B.
dx=0
dy=-0.5
dz=0.5
laenge=100.0

nach oben und hinten mit entfernung 100
um den Punkt dx*l,dy*l,dz*l soll nun ein Kreis hin .

PS:Der Richtungs Vector kann x belibig sein .
  • Zuletzt bearbeitet von Markus2 am Di, Apr 06, 2004 12:32, insgesamt einmal bearbeitet

Vertex

BeitragSo, Apr 04, 2004 18:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmmm was ist eigentlich der 2. Vektor?
vertex.dreamfall.at | GitHub

Xenon

BeitragSo, Apr 04, 2004 19:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Hööö??

Du willst um einen Richtungsvektor einen Kries machen?

1.: Richtungsvektoren sind wie der Name sagt für Richtungen und nicht für Positionsangaben, dafür sind die Positionsvektoren da.

2.: Einen Kreis kannst du doch ganz leicht mit den Sinus und Kosinus Funktionen erstellen und wenn genau in 10 Grad Schritten is es ja irgendwie noch leichter...

Hier der Code in 2D, kleiner und Verständlicher:

Code: [AUSKLAPPEN]
Graphics 800,600,16,2
SetBuffer BackBuffer()

Const mx = 400
Const my = 300
Const radius = 100

Repeat
   Cls
   
   For i=0 To 359 Step 10
      Plot mx+Cos(i)*radius, my+Sin(i)*radius
   Next
   
   Flip
Until KeyDown(1)
End


Und hier in 3D annäherungsweise wie du es willst?
Ich hab keine Steuerung eingebaut und die Ansicht is doof, dürfte aber ungefähr so sein, so wie ich dein Prob. verstanden hab.

Code: [AUSKLAPPEN]
Type vector
   Field dx#, dy#, dz#
   Field length#
End Type

Graphics3D 800,600,16,2
SetBuffer BackBuffer()

Const radius = 2

Dim punkte(35)
For i=0 To 35
   punkte(i) = CreateSphere(16)
Next

Local cam = CreateCamera()

Local v.vector = New vector
v\dx# = 10
v\dy# = 20
v\dz# = 5

NormalizeVector(Handle(v))
v\length# = 5

For i=0 To 35
   PositionEntity punkte(i), v\dx#*v\length#+Cos(i*10)*radius, v\dy#*v\length#+Sin(i*10)*radius, v\dz#*v\length#
   ScaleEntity punkte(i), 0.1, 0.1, 0.1
Next

PointEntity cam, punkte(0)

Repeat
   RenderWorld
   Text 0, 0, v\dx#+", "+v\dy#+", "+v\dz#
   Flip
Until KeyDown(1)
End

Function NormalizeVector(vhandle)
   v.vector = Object.vector(vhandle)
   v\length# = Sqr#(v\dx#*v\dx# + v\dy#*v\dy# + v\dz#*v\dz#)
   v\dx# = v\dx# / v\length#
   v\dy# = v\dy# / v\length#
   v\dz# = v\dz# / v\length#
End Function


Mfg Xenon

Markus2

BeitragSo, Apr 04, 2004 20:20
Antworten mit Zitat
Benutzer-Profile anzeigen
@Vertex der erste Vector ist 0,0,0 der zweite dx*l,dy*l,dz*l

@Xenon

Naja fast ,
wie ich nen Kreis in 2D mache weiß ich .
Deine darstelung in 3D ist aber falsch , mach mal nen
Vector nach oben und guck was passiert , genau
das Problem habe ich Wink

Ich glaube es sind zwei Dinge die getan werden müssen ,
erst den Endpositions Vector transformieren das der senkrecht steht
dann die Punkte drum machen und wieder zurück transformieren
oder so ... ???

Aus dem Richtungsvector mit der länge habe ich den Positionsvector
darum soll der Kreis mit nem Radius von z.B. 10

Die Spheres könnte man auch on the fly erstellen nach einem
errechneten Pos. Vetor , die Kugel sind nur zum sichtbar machen ,
eigentlich reicht es wenn ich die Pos. aller Kugel im Kreis bekomme .

Xenon

BeitragSo, Apr 04, 2004 22:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Gut, versteh ich das dann Richtig, das das so Aussehen sollte nur mit Vektoren??

Code: [AUSKLAPPEN]
Graphics3D 800,600,32,2
SetBuffer BackBuffer()

Const mx = 400
Const my = 300
Const radius = 20

Dim punkte(35)

cube = CreateCube()

For i=0 To 35
   punkte(i) = CreateSphere(16, cube)
Next

For i=0 To 35
   PositionEntity punkte(i), Cos(i*10)*radius, 1, Sin(i*10)*radius
   ScaleEntity punkte(i), 1, 0.01, 1
Next

Local cam = CreateCamera()

PositionEntity cam, 0, 0, -50

ScaleEntity cube, 0.1, 10, 0.1

Local xrot = 1
Local yrot = 1
Local zrot = 1

Local time = MilliSecs()

Repeat
   TurnEntity cube, xrot, yrot, zrot
   
   If MilliSecs()-time > 3000 Then
      xrot = Rand(-3,3)
      yrot = Rand(-3,3)
      zrot = Rand(-3,3)
      time = MilliSecs()
   End If
   
   RenderWorld
   Flip
Until KeyDown(1)
End

Markus2

BeitragMo, Apr 05, 2004 6:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Genau so , ohne Parent Entitys , also rein Mathematisch .

Zum sichtbar machen der Vectoren kann man aber Entitys benutzen oder
einfach nur Pixel würden mir reichen .

Irgendwie muß man das mit einer Matrix lösen können ???
Aber wie ???

Also das Ende von dieser Linie die frei im Raum steht ist oben .
Wenn man das jetzt umrechnen könnte das diese Linie nach
oben steht was man eigentlich nicht bräuchte kann man da den
2D Kreis dran hängen und wieder zurück rechnen .

Oder wenn ich wüste wie man Funk. AlignToVector nachbilden
kann wäre mir auch geholfen .

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group