|
You last visited: Today at 10:59
Advertisement
C++ Rotation 2d Koordinatensystem Problem
Discussion on C++ Rotation 2d Koordinatensystem Problem within the C/C++ forum part of the Coders Den category.
03/09/2013, 22:42
|
#1
|
elite*gold: 4
Join Date: Mar 2010
Posts: 3,148
Received Thanks: 1,535
|
C++ Rotation 2d Koordinatensystem Problem
Habe ein Problem,
ich will ein punkt um einen anderen punkt(mittelpunkt(83|83)) drehen.
Code:
int xWert = m_pWndCustom[y]->rect.left+25;//mittelpunkt des kastens
int yWert = m_pWndCustom[y]->rect.top+25;//mittelpunkt des kastens
double beta = fRadan[0];//fRadan = ständig raufzählender wert von 0 - 2*PI für durchgehende umdrehung
int x = (int)((xWert - 83 ) * cos( beta ) - (yWert - 83 ) * sin( beta ) + 83 );
int y2 = (int)((yWert - 83 ) * cos( beta ) + (xWert - 83 ) * sin( beta ) + 83 );
mein Problem ist, das der Abstand zum mittelpunkt bei jeder rotation noch passt, aber es rotiert nicht an einem stück sondern ist ungleichmäßig und sehrschnell an verschiedenen orten im koordinaten system, und nicht gleichmäßig im kreis rotierend.
Wer ein Video zum Problem will soll das hier schreiben.
|
|
|
03/09/2013, 22:46
|
#2
|
elite*gold: 1000
Join Date: Apr 2012
Posts: 1,003
Received Thanks: 208
|
x,y - Drehpunkt
x0,y0 - Zentrum
phi - Drehwinkel
Am besten zeichnest du das mal auf ein Blatt Papier, rechnest den neuen Punkt aus, zeichnest ihn ein und dann weißt du, ob die Formel passt
|
|
|
03/09/2013, 23:01
|
#3
|
elite*gold: 4
Join Date: Mar 2010
Posts: 3,148
Received Thanks: 1,535
|
Quote:
Originally Posted by qkuh
x,y - Drehpunkt
x0,y0 - Zentrum
phi - Drehwinkel
Am besten zeichnest du das mal auf ein Blatt Papier, rechnest den neuen Punkt aus, zeichnest ihn ein und dann weißt du, ob die Formel passt 
|
leider passt die formel auch nicht, da mein punkt immer noch wild durch die gegen fliegt, und sich nicht zum Radianten dreht.
Code:
int xWert = m_pWndCustom[y]->rect.left+25;
int yWert = m_pWndCustom[y]->rect.top+25;
double beta = fRadan[1];
int x = (int)(83 + (xWert - 83)*cos(beta) - (yWert - 83) * sin(beta));
int y2 = (int)(83 + (xWert - 83)*sin(beta) + (yWert - 83) * cos(beta));
|
|
|
03/09/2013, 23:48
|
#4
|
elite*gold: 1000
Join Date: Apr 2012
Posts: 1,003
Received Thanks: 208
|
Was setzt du denn für beta ein? PS: 90° im Uhrzeigersinn = -90°, also -pi/2
|
|
|
03/09/2013, 23:53
|
#5
|
elite*gold: 4
Join Date: Mar 2010
Posts: 3,148
Received Thanks: 1,535
|
Quote:
Originally Posted by qkuh
Was setzt du denn für beta ein? PS: 90° im Uhrzeigersinn = -90°, also -pi/2
|
mein radianten ( womit ich auch die hinter grund texturen drehe mittels directx und 2drotation )
also es soll sich immer 1/6tel drehen, dann kurze pause, dann wieder 1/6tel usw.
also wäre fRadan[1]
bei der ersten umdrehung 0 - 1.04....
also setze keine grad sondern mein Radianten ein.
|
|
|
03/10/2013, 15:13
|
#6
|
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
|
Gleichmäßig in der Zeit rotierend heißt, dass der Quotient aus Winkel/Zeit konstant bleibt. Deine Update-Zeit zum Zeichnen ist nicht konstant, d.h. du musst den Winkel dementsprechend anpassen. Ich hab' noch ein älteres Java Applet gefunden, wo ich auch eine gleichmäßige Rotation in der Zeit ausprobiert habe, vllt hilfts dir was:
Code:
import java.applet.Applet;
import java.awt.Graphics;
public class Rotation extends Applet implements Runnable {
private double tOld;
private double phiOld = 0;
private double omega = 2.0 * Math.PI;
private int xCenter = 200;
private int yCenter = 200;
private int radius = 100;
private double nextPhi(double t) {
return omega * t + phiOld;
}
private double nextX(double phi) {
return radius * Math.cos(phi);
}
private double nextY(double phi) {
return radius * Math.sin(phi);
}
@Override
public void init() {
this.resize(600, 400);
this.tOld = (System.currentTimeMillis() / 1000.0);
Thread t = new Thread(this);
t.start();
}
@Override
public void paint(Graphics g) {
super.paint(g);
double t = (System.currentTimeMillis() / 1000.0);
double dt = t - tOld;
tOld = t;
double phi = nextPhi(dt);
g.drawLine(xCenter, yCenter, xCenter + (int) nextX(phi), yCenter
+ (int) nextY(phi));
phiOld = phi;
}
@Override
public void run() {
while (true) {
try {
Thread.sleep(10);
this.repaint();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
|
|
|
03/10/2013, 23:43
|
#7
|
elite*gold: 4
Join Date: Mar 2010
Posts: 3,148
Received Thanks: 1,535
|
Quote:
Originally Posted by xNopex
Gleichmäßig in der Zeit rotierend heißt, dass der Quotient aus Winkel/Zeit konstant bleibt. Deine Update-Zeit zum Zeichnen ist nicht konstant, d.h. du musst den Winkel dementsprechend anpassen. Ich hab' noch ein älteres Java Applet gefunden, wo ich auch eine gleichmäßige Rotation in der Zeit ausprobiert habe, vllt hilfts dir was:
Code:
import java.applet.Applet;
import java.awt.Graphics;
public class Rotation extends Applet implements Runnable {
private double tOld;
private double phiOld = 0;
private double omega = 2.0 * Math.PI;
private int xCenter = 200;
private int yCenter = 200;
private int radius = 100;
private double nextPhi(double t) {
return omega * t + phiOld;
}
private double nextX(double phi) {
return radius * Math.cos(phi);
}
private double nextY(double phi) {
return radius * Math.sin(phi);
}
@Override
public void init() {
this.resize(600, 400);
this.tOld = (System.currentTimeMillis() / 1000.0);
Thread t = new Thread(this);
t.start();
}
@Override
public void paint(Graphics g) {
super.paint(g);
double t = (System.currentTimeMillis() / 1000.0);
double dt = t - tOld;
tOld = t;
double phi = nextPhi(dt);
g.drawLine(xCenter, yCenter, xCenter + (int) nextX(phi), yCenter
+ (int) nextY(phi));
phiOld = phi;
}
@Override
public void run() {
while (true) {
try {
Thread.sleep(10);
this.repaint();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
|
jap das mit dem winkel ist mir auch im nachhinein bewusst geworden das der konstant bleiben muss, trotzdem danke
|
|
|
 |
Similar Threads
|
Autoit- Bot für GW2, Problem mit Kamera Rotation
11/09/2012 - AutoIt - 2 Replies
Hey Leute,
ich meld mich mal wieder. Bin schon gut voran gekommen (auch wenn ich zugeben muss dass Autoit nicht das Beste für größere Projekte ist :D).
Jetzt hab ich wieder ein Problem, ich habe mir nämlich einige Speicheradressen aus der Rubrik GW2 Hacks, Bots, Cheats & Exploits besorgt, unter anderem folgende:
RotCos = 0x016A55C0
RotSin = 0x016A55C4
Auf Nachfrage habe ich gesagt bekommen, dass das der Kosinus bzw. Sinus der Kamera ist. Nun meine Frage, wie schließe ich von dem...
|
Rotation *~*
06/27/2012 - S4 League - 2 Replies
Hallo,
Wenn jemand lust hat Rotation zu machen soll er einfach in den raum kommen
ich werde die Raumdaten immer editieren, hier sind die Raumdaten :
1.Durchgang
Death Match
Touchdown
|
Rotation help
10/31/2011 - World of Warcraft - 6 Replies
Hey, lately I have been working on a application for Theory Crafter, and I have came to a point where I need a rotation from WoW that I can use as a base! All I'm really asking for is a good 3-6 spell rotation, preferably mage or shadow priest, that I can use for this 'experiment' . To anyone who post there rotation, I will quote your post with the results of each rotation/spell so in a way, your helping me and I'm helping you!
Eventually I intend to start takeing other varibles, like gear...
|
Koordinatensystem / MAP
06/08/2006 - World of Warcraft - 7 Replies
Hallo zusammen,
ich wollte mich mal freundlich erkundigen wie es sich mit den ganzen MapKoordinaten verhält. Gibt es Jemanden, der eine Übersicht dieser Koordinaten hat und/oder weiß Jemand wo ich diese bekommen kann?
E.g./Z.B.: 24,55
Ist es möglich die Koordinaten, an welchen sich der Spieler gerade befindet, mit einem externen Programm auszulesen OHNE die WOW-"Rules" zu verletzten? Wenn ja, würde mich der Lösungsweg und nicht die Lösung an sich interessieren.
Falls Jemand Infos...
|
All times are GMT +1. The time now is 11:00.
|
|