Punkte um Mittelpunkt drehen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

StarGazer

Betreff: Punkte um Mittelpunkt drehen

BeitragFr, Feb 25, 2005 0:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo, ich habe da Problem.
Ich möchte mehrere Punkte um einen Mittelpunkt drehen. Ich kenne die Koordinaten der Punkte und des Mittelpunktes.
Nur was soll ich nun tun damit ich die Punkte A B und C um den Mittelpunkt z.B um 90 Grad drehe ?

_______________________________________
___A__________________________________
__ Exclamation __________________________________
_______________________________________
________ Mittelpunkt_____________________
___________ Idea _________________________
_______________________________________
_______________________B______________
______________________ Exclamation ______________
_______________________________________
___________________C__________________
__________________ Exclamation __________________
_______________________________________

gibt es auch eine einfache Möglichkeit die Punkte um den Mittelpunkt zu spiegeln ?
 

Dreamora

BeitragFr, Feb 25, 2005 1:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Da man Transformationen nur um einen Ursprung machen kann, empfielt sich folgendes Abbildungsvorgehen:

1.
Zuerst führst du eine Koordinatentransformation des gesammten Systemes in den Mittelpunkt durch. ( alles wird um (-x, -y) geschoben wobei (x,y) die Koordinaten des Mittelpunktes sind )

Dadurch hast du die "realen" Koordinaten der 3 Punkte bezüglich des Mittelpunktes.

2.
Nun führst du die Drehung aus.

3.
Danach die Koordinatentransformation wieder rückgängig machen ( also um (x,y) verschieben ).
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Hot-Bit

Sieger des B2D Retro Wettbewerb / Aug 04

BeitragFr, Feb 25, 2005 2:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Hoi.

lol

Der war gut Smile

Nimm Sin()&Cos() !

Toni
... ..... .i.. ...

***
Sieger des BB-Gameboy-Contest 2004
Sieger des Blitzbaster 2D-Minigolf-Contest 2005
***

Vertex

BeitragFr, Feb 25, 2005 8:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Nix mit lustig, er hat fast recht...
Ich bin der Meinung, man muss zuerst die Drehung vollziehen, und erst dann kann man Verschieben. Zurück verschieben braucht man dann nicht.

mfg olli
vertex.dreamfall.at | GitHub

BladeRunner

Moderator

BeitragFr, Feb 25, 2005 9:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Beide Ansätze haben ihre Berechtigung:

1. Verschieben, Drehen, rückverschieben. führt zu dem hier gewünschten Verhalten. das Dreieck rotiert um seinen Mittelpunkt.

2. drehen um einen externen Nullpunkt. Hier nicht gewünscht, beschreibt einen Bogen um den vorhandenen Nullpunkt.

Als Mischform kann der "Nullpunkt" frei in Relation zum Dreieck gewählt werden um um diesen Punkt zu rotieren.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

antome

!!! gesperrt !!!

BeitragFr, Feb 25, 2005 9:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich geh mal davon aus das es sich um ein 3D Programm handelt:

Wäre es da nicht Sinnvoll ein Pivot mit den Koordinaten des Mittelpunktes
zu erstellen, und es als Parent für A B und C zu erklären.
Dann einfach Parent drehen und die Childs mit.

BladeRunner

Moderator

BeitragFr, Feb 25, 2005 9:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaube eher er will es 2D machen.
Im Prinzip ist ein Pivot ja nix anderes als ein lokaler "Nullpunkt" für Rotationen etc.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

Hot-Bit

Sieger des B2D Retro Wettbewerb / Aug 04

BeitragFr, Feb 25, 2005 11:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Hoi.

Das *LUSTIG* sollte zum Ausdruck bringen, daß die Definition von dem Fragesteller sicher nicht verstanden wurde ....

Der wird jetzt immer noch nicht wissen, um was es geht Wink

Toni
... ..... .i.. ...

***
Sieger des BB-Gameboy-Contest 2004
Sieger des Blitzbaster 2D-Minigolf-Contest 2005
***
 

antome

!!! gesperrt !!!

BeitragFr, Feb 25, 2005 11:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Er muss sich erst mal melden und erklären ob es ein 2D oder 3D Programm ist.
Sonst nützen alle weiteren Erklärungen nichts.
 

Hot-Bit

Sieger des B2D Retro Wettbewerb / Aug 04

BeitragFr, Feb 25, 2005 11:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Hoi.

Ich bin der Meinung, daß er so etwas sucht:
Code: [AUSKLAPPEN]
Graphics 800,600
SetBuffer BackBuffer()
SeedRnd MilliSecs()

Dim Points(3), fast#(3), Angle#(3)

Global mitteX=400, mitteY=300
timer=CreateTimer(60)

For i=1 To 3: Points(i)=50+(i*70): fast(i)=Rnd(1,4): Next

While Not KeyHit(1)
   Cls
      For i=1 To 3
        Color 255,255,128
        Oval (mitteX-15)+Cos(Angle(i))*Points(i),(mitteY-15)+Sin(Angle(i))*Points(i),30,30,1
        Angle(i)=(Angle(i)+fast(i)) Mod 360
        Color 255,192,0
        Oval mittex-20,mittey-20,40,40,1 
      Next
   Flip
   WaitTimer(timer)
Wend
End


Toni
... ..... .i.. ...

***
Sieger des BB-Gameboy-Contest 2004
Sieger des Blitzbaster 2D-Minigolf-Contest 2005
***

StarGazer

BeitragFr, Feb 25, 2005 12:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für eure Antworten, dadurch bin ich auf einige Idee gekommen wie ich ein Paar Sachen lösen kann.

Wenn ich den Entfernung von den Punkten zum Mittelpunkt weis, kann ich ich theorisiert das ganze Zeugs spiegeln,
auch sogar um 90 Grad drehen denke ich, einfach die X Werte mit den Y Werten vertauschen, doch was tun wenn es nur um 12 Grad gedreht werden soll.
(es ist für 2D gedacht), sorry daß ich es nicht gleich erwähnte

@ Hot-Bit : dein Beispile sieht echt toll aus 8)
muß mal testen ob ich das benutzen kann.
 

Hot-Bit

Sieger des B2D Retro Wettbewerb / Aug 04

BeitragFr, Feb 25, 2005 14:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Hoi.

Hmmm, du hast ja hier alles, was du brauchst !

Wenn du nur um 90 Grad drehen willst, dann setzt halt fast(x) auf 90.

Und spiegeln geht auch ganz einfach ....

Toni
... ..... .i.. ...

***
Sieger des BB-Gameboy-Contest 2004
Sieger des Blitzbaster 2D-Minigolf-Contest 2005
***

stfighter01

BeitragFr, Feb 25, 2005 14:26
Antworten mit Zitat
Benutzer-Profile anzeigen
schneller gehts mit vectorrechnung, aber ich werds jetzt trotzdem mit winkeln machen weils einfacher ist.


um den punkt zu drehen muss er in gleicher entfernung zu seinem mittelpunkt aber in einem anderen winkel stehen.

also ermitteln wir mal die aktuelle entfernung und den winkel.


winkel= atan2(mittey-py, mittex-px) ; siehe onlinehilfe

und

distanz= sqr((mittex-px)^2+ (mittey-py)^2) ; pythagorasformel


jetzt zählen wir zum winkel den gewünschten drehwinkel hinzu.


winkel= winkel+ drehwinkel


pxneu= mittex+cos(winkel)*distanz
pyneu= mittey+sin(winkel)*distanz



das sollte funktionieren, aber mach dich trotzdem mal über die winkelfunktionen und den satz des pythagoras schlau, das zeug brauchst du immer wieder.


mfg stfighter
Denken hilft!

matte

Betreff: Rotationen um alle Achsen

BeitragFr, Feb 25, 2005 18:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

du kannst folgende Rotationen realisieren:
Phi ist dabei der Winkel um den du drehen willst. Die Punkte stehen in dem Array P(I,3) wobei P(I,1)=x-Wert, P(I,2)=y-Wert usw. gilt. Im 2D ist natürlich nur die Drehung um die Z-Achse sinnvoll (Das ist die Achse die aus dem Bildschirm rausguckt). Aber man kann auch Pseudo-3D machen, wenn man sich zum Beispiel wie in Mathe eine 45° z-Achse definert.
Kannst ja mit den Funktionen ein bißchen spielen...


Code: [AUSKLAPPEN]
;Rotation um die Z-Achse
Function RotateZ(Faktor,Phi)
 For I=1 To n
  xx=P(I,1)
  yy=P(I,2)
  P(I,1)=xx*Cos(Faktor*Phi)+yy*Sin(Faktor*Phi)
  P(I,2)=-xx*Sin(Faktor*Phi)+yy*Cos(Faktor*Phi)
 Next
End Function

;Rotation um die Y-Achse
Function RotateY(Faktor,Phi)
 For I=1 To n
  xx=P(I,1)
  zz=P(I,3)
  P(I,1)=xx*Cos(Faktor*Phi)-zz*Sin(Faktor*Phi)
  P(I,3)=xx*Sin(Faktor*Phi)+zz*Cos(Faktor*Phi)
 Next
End Function

;Rotation um die X-Achse
Function RotateY(Faktor,Phi)
 For I=1 To n
  yy=P(I,2)
  zz=P(I,3)
  P(I,2)=yy*Cos(Faktor*Phi)+zz*Sin(Faktor*Phi)
  P(I,3)=-yy*Sin(Faktor*Phi)+zz*Cos(Faktor*Phi)
 Next
End Function

matte

Betreff: Ergänzung zu Achsenrotation

BeitragFr, Feb 25, 2005 18:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Achso, die Drehung findet natürlich immer mit dem Abstand zum Koordinatenursprung statt. Wo du den hinlegst ist dir überlassen. Hier liegt der Ursprung bei 640x480 genau in der Mitte und die z-Achse geht im 45° Winkel nach hinten.

Code: [AUSKLAPPEN]
;Zeichnen von 3D Punkten
Function Point3D(x,y,z)
 Plot(x+320+z/2*Cos(45),240-(y+z/2*Sin(45)))
End Function

Kabelbinder

Sieger des WM-Contest 2006

BeitragFr, Feb 25, 2005 19:31
Antworten mit Zitat
Benutzer-Profile anzeigen
-Den abstand zum Mittelpunkt messen
-Den Winkel zum Mittelpunkt messen und 90° dann addieren = alpha
-Den neuen Punkt zeichnen bei:
mx+Cos(alpha)*abstand,my+Sin(alpha)*abstand
<Wing Avenger Download> ◊◊◊ <Macrophage Download>

StarGazer

BeitragSa, Feb 26, 2005 17:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich danke euch für die vielen Antworten.
Einige Sachen habe ich schon gelöst Very Happy , den Rest werde ich hoffentlich auch noch schaffen.
Danke euch.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group