我正试图将车直线移动。 我所拥有的是该线的起点和终点。
这是我到目前为止所尝试的
glTranslated(x, y, z);
glRotated(angle * 180 / PI, 0, 1, 0);
glColor3d(0.1, 0.1, 0.4);
glutSolidCube(40); // imagine that this is a car
x += speed * sin(angle + PI/2);
z += speed * cos(angle + PI/2);
角度由
接收double dist = sqrt((double)(x2-x1)*(x2-x1) + (double)(y2-y1)*(y2-y1));
int deltaX = abs(x2-x1);
angle = PI - acos(deltaX/dist)
如果点1位于点2的左侧并且只有一辆车在移动,则此解决方案偶尔会起作用。 如果我试图同时移动几辆车,只有一辆车按预期移动。然而其他人似乎有自己的意志......
因此...
重要提示:汽车正在平面xz平面上移动(y = 0)
修改
这是我的车类(目前)
#include "glut.h"
#include <math.h>
#include "Car.h"
Car::Car(double x, double y, double z, double speed, double angle)
{
this->x = x;
this->y = y;
this->z = z;
this->speed = speed;
this->angle = angle;
}
void Car::draw3D()
{
glTranslated(x, y, z);
glRotated(angle * 180 / 3.14, 0, 1, 0);
glColor3d(0.1, 0.1, 0.4);
glutSolidCube(40);
x += speed * sin(angle + 1.57);
z += speed * cos(angle + 1.57);
}
这就是我构建汽车的方式
for(vector<Road*>::iterator it = roads.begin(); it != roads.end(); ++it) {
int x1 = (*it)->x1;
int y1 = (*it)->y1;
int x2 = (*it)->x2;
int y2 = (*it)->y2;
double mangle = -atan2((double)y2-y1, (double)x2-x1);
cars.push_back(new Car(x1-GRID_SIZE/2, 0, y1-GRID_SIZE/2, 5, mangle));
}
这就是我画所有车的方式
for(vector<Car*>::iterator it = cars.begin(); it != cars.end(); ++it) {
(*it)->draw3D();
}
答案 0 :(得分:0)
对于角度来说,它可能更容易使用
angle = atan2(y2-y1, x2-x1);
atan2不仅可以计算你的矢量的反正切值,而且只要你的角度不确定就会处理令人讨厌的案件处理。
(请记住,余弦/正弦是周期性的pi,所以只使用delta值会产生两个可能的角度,即(1,1)和(-1,-1)都会产生角度45度)。
也许这确实解决了你不能一起开车的问题。如果不是,请检查每辆车是否都有自己的角度。