直线移动汽车

Posted

技术标签:

【中文标题】直线移动汽车【英文标题】:Move car in a straight line 【发布时间】:2014-01-12 00:09:56 【问题描述】:

我正在尝试。 我所拥有的是线的起点和终点。

这是我迄今为止尝试过的

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();

【问题讨论】:

在draw3d()的开头放glPushMatrix();,在结尾glPopMatrix();。然后再试一次。 是的。也只是这么想。现在它正在工作。感谢您的帮助。 好。最后一件事:GLUT 已被弃用并且非常陈旧,您可以考虑改用GLEW。 【参考方案1】:

对于角度来说可能更容易使用

angle = atan2(y2-y1, x2-x1);

atan2 不仅会计算向量的反正切,还会在您的角度不确定时处理令人讨厌的大小写。

(请记住,余弦/正弦是周期性的,周期为 pi,因此仅使用 delta 值将导致两个可能的角度,即 (1,1) 和 (-1,-1) 都将导致角度 45 °)。

也许这确实解决了您的汽车不能一起行驶的问题。如果没有,请检查每辆车是否都有分配给它的角度。

【讨论】:

有了这个,我可以一次向所有可能的方向移动一辆车,所以谢谢你,但我仍然不能同时移动几辆车。是的,每辆车都有自己的角度。 我也不得不使用angle = -atan2(y2-y1, x2-x1); 为什么不能移动几辆车?当你尝试时会发生什么?你打算怎么做? 1.其中一辆车朝着正确的方向行驶,而其他车则以不同的方式行驶。 2. 我有一个汽车对象向量,每个对象都用我问题中的第一个代码 sn-p 绘制自己。 能否添加汽车类的全部代码和绘图函数的示例函数调用?我现在只能大胆猜测。

以上是关于直线移动汽车的主要内容,如果未能解决你的问题,请参考以下文章

如何将 SpriteKit 节点移动为汽车驾驶体验?

Handyscan汽车三维扫描服务尺寸检测的应用

手机控车OBD-移动管家手机控车方案基于Android手机智能控制汽车系统的研究与实现;

汽车移动网站重定向

自动驾驶时代数字化的汽车已成最大移动电脑?

汽车VIN码识别/汽车车架号OCR识别,移动端VIN码识别,OCR扫描工具