160分求解车辆在凸凹不平地面行驶的颠簸算法

zxl_llx 2005-08-26 02:21:20
我的初步想法是,取车的前后4轮,求出它们的坐标,然后绕根据前后高度差使车绕中心转,但做出来的结果并不理想。
请各位大侠指教,给个思路,算法。
...全文
416 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
sukyboor 2006-03-21
  • 打赏
  • 举报
回复
可以考虑用,ODE吧
rocandroc 2005-11-01
  • 打赏
  • 举报
回复
做个记号,收藏!
IO_X 2005-10-28
  • 打赏
  • 举报
回复
要更精确的话,就用有限元分析吧...车辆和路面的材料结构也考虑进去。
IO_X 2005-10-27
  • 打赏
  • 举报
回复
要做的精确,需要对车辆进行简单的刚体动力学建模(还要建立关节自由度模型,如果要真实,还得包括弹性物体,例如Spring的实现),两种解决方法:
1 自己写物理引擎
2 用第三方物理引擎(Navok/PhysX(就是NovodeX)/ODE(开源的)...)

我写过基于NovodeX物理引擎的较精确的车辆模拟程序(图形用了OGRE),自己写物理引擎会累死。
konriuen 2005-10-26
  • 打赏
  • 举报
回复
楼住,我觉得你这个蛮有意思的,请问你做这个的目的是什么呢?使用的真正的汽车么?
sailor_Song 2005-10-20
  • 打赏
  • 举报
回复
好像都没有考虑车辆本身的防震技术哦,按照楼主那样的,算出来的应该是很震的,但是车辆实际上没有那么震,应该结合车辆防震技术的参数。个人的一点点看法,学习中
tangt 2005-09-16
  • 打赏
  • 举报
回复
车的颠簸方法我觉得并不重要,一个普通的噪声就够了。
真正颠簸的感觉来源于坐车人的肢体感觉和车内外的视觉差异。
前者可能需要几年后用虚拟现实实现,后者可以用绘制车窗的办法让游戏的人产生视觉的晃动感,相信你玩极品飞车,用驾驶模式和尾随模式就会有不同的颠簸感,而你在驾驶模式使用车窗模式和全屏模式所产生的颠簸感也略有差别。
mintwlf 2005-09-09
  • 打赏
  • 举报
回复
如果你只是简单的模拟一下,可以选取路面的四个车轮正下面的点,把车轮的三个轮子放到这个点上然后看地面剩下的点和剩下车轮是否不在刚才三点确定的平面同侧,如果是基本就OK了。
寻开心 2005-09-06
  • 打赏
  • 举报
回复
另外 一种做法
不固定后面两个轮子,而是选择四个轮子当中,距离地面最高的三个

不同的四选三方法,表现的效果不相同
zxl_llx 2005-09-04
  • 打赏
  • 举报
回复
谢谢各位的回复,我想只是简单的模拟一下,没必要建立那么复杂的数学模型,我也不是研究汽车性能的,只是游戏的一部分,没必要那么复杂的。
mintwlf(Programmer) 你好,可不可以给一个简单的数学模型?
mount_angel 2005-09-01
  • 打赏
  • 举报
回复
还会涉及到随机振动的问题,最好看看《机械振动》
mintwlf 2005-08-31
  • 打赏
  • 举报
回复
首先,这个问题要结合力学知识来解决,由车的质量、车的重心、车速、车轮大小、路面情况确定车的受力情况,然后确定到底哪几个轮子着地了,以及车的形态,车可能在空中飞一下或者四个轮子都在地上,而且汽车四个轮子不一定在同一个平面上的,这些都是可以计算的。这是个比较复杂的力学问题,需要一个深刻的计算和仔细的讨论,这样得到的数据才会逼真。
zxl_llx 2005-08-31
  • 打赏
  • 举报
回复
不好意思,经过整理的。我把我的思路说一下:

A___________B AB是前轮,CD是后轮。我假设ABCD是正方形。这样的话,我比较B,D点的高度,
| | 由BD所确定一条线,求出它与水平面的夹角,令车绕AC旋转该角度。
| | AC也同样这么做。
| . |
| O | 但结果并不理想。
| |
|___________|
D C

谢谢回复,我再用你说的方法做一下。比较一下!
我会再开贴给你欠你的60分!
寻开心 2005-08-29
  • 打赏
  • 举报
回复
不加注释,这看起来很累

四个轮子,有四个高度
而确定一个面只需要三个,四选三的方法就是,选择后面两个轮子,以及前两个轮子的较高着

你的代码当中连一个if语句都没有如何做到四选三的?

把你的思路写出来,看这个代码太累了
zxl_llx 2005-08-27
  • 打赏
  • 举报
回复
非常感谢 happy__888([顾问团]寻开心) 的回复,我刚开始也是这么想的,但出现的实际情况并不理想。也许是我的程序问题,你能帮我看一下吗?
这是用OPENGL做的:
turne 是转角。x,y,z是车的世界坐标,在车的中心。g_eye[]是摄像机坐标。
getHight()取得该点的高度。

float x,y,z;
x= (float)(g_eye[0] +8*cos(PI*turne/180));
z= (float)(g_eye[2] +8*sin(PI*turne/180));
y= getHeight(x,z)+1;

//汽车颠簸算法
float tmpangle0=PI*(turne-45)/180;
float arctg0=atan(((getHeight(x+3*cos(tmpangle0),z+3*sin(tmpangle0))+1)
-(getHeight(x-3*cos(tmpangle0),z-3*sin(tmpangle0))+1))/6)*180/PI;


float tmpangle1=PI*turne/180+PI*45/180;
float arctg1=atan(((getHeight(x+3*cos(tmpangle1),z+3*sin(tmpangle1))+1)
-(getHeight(x-3*cos(tmpangle1),z-3*sin(tmpangle1))+1))/6)*180/PI;

glPushMatrix();
glTranslatef(x,y,z);
glRotatef(arctg0,cos(tmpangle0),0,sin(tmpangle0));//颠簸
glRotatef(arctg1,cos(tmpangle1),0,sin(tmpangle1));//颠簸
glRotatef(turne,0,1,0);
glRotatef(180,0,1,0);
m_3ds->show3ds(3,0,0,0,0.2f);
glPopMatrix();

并不理想,有时候车会进地里,有时会飞起来,请帮忙,谢谢!
寻开心 2005-08-26
  • 打赏
  • 举报
回复
地形匹配技术
四个轮子的位置,各自做一个向下的检测,获取轮子的位置高度
用两个后轮的高度位置A,B 和两个前轮子的高度位置C和D当中的最高的点形成一个平面
ABC或者ABD
这个就是你的汽车底盘所在的平面了。
这个平面的法向量就是你的汽车的上向量的方向了
你的运动方向不变,平面的倾斜角就是汽车的滚动角了

4,448

社区成员

发帖
与我相关
我的任务
社区描述
图形图像/机器视觉
社区管理员
  • 机器视觉
  • 迪菲赫尔曼
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧