Punkte um Mittelpunkt drehen
Übersicht

![]() |
StarGazerBetreff: Punkte um Mittelpunkt drehen |
![]() Antworten mit Zitat ![]() |
---|---|---|
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__________________________________ __ ![]() _______________________________________ ________ Mittelpunkt_____________________ ___________ ![]() _______________________________________ _______________________B______________ ______________________ ![]() _______________________________________ ___________________C__________________ __________________ ![]() _______________________________________ gibt es auch eine einfache Möglichkeit die Punkte um den Mittelpunkt zu spiegeln ? |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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-BitSieger des B2D Retro Wettbewerb / Aug 04 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hoi.
lol Der war gut ![]() Nimm Sin()&Cos() ! Toni |
||
... ..... .i.. ...
*** Sieger des BB-Gameboy-Contest 2004 Sieger des Blitzbaster 2D-Minigolf-Contest 2005 *** |
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 !!! |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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-BitSieger des B2D Retro Wettbewerb / Aug 04 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() Toni |
||
... ..... .i.. ...
*** Sieger des BB-Gameboy-Contest 2004 Sieger des Blitzbaster 2D-Minigolf-Contest 2005 *** |
antome!!! gesperrt !!! |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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-BitSieger des B2D Retro Wettbewerb / Aug 04 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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-BitSieger des B2D Retro Wettbewerb / Aug 04 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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! |
![]() |
matteBetreff: Rotationen um alle Achsen |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
||
![]() |
matteBetreff: Ergänzung zu Achsenrotation |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
||
![]() |
KabelbinderSieger des WM-Contest 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
-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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich danke euch für die vielen Antworten.
Einige Sachen habe ich schon gelöst ![]() Danke euch. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group