
如何用c++编写运动轨迹程序?
比如设计匀速直线运动、圆周运动、变速运动等,最后能够输出轨迹中位置的数据,方便在matlab中把轨迹画出来。...
比如设计匀速直线运动、圆周运动、变速运动等,最后能够输出轨迹中位置的数据,方便在matlab中把轨迹画出来。
展开
1个回答
展开全部
下面是我的第一感觉,不一定是最好的,最好能多去网上看看。
所谓的运动本身在更小的时间t内(例如1ms),就是从某一个坐标,运动到下一个坐标的过程。比如说匀速圆周运动。 当它在某一个点a的时候,具有速度v,加速度为a,那么在相当小的时间t内,它沿着v的方向运动到下一个点b,我们知道a和b的距离为vt。 它的当前速度为v+a*t。如果事先给出初始的坐标点,以及初始的速度,方向,加速度。那么就可以以非常小的时间间隔,计算下一个点的坐标点,以及下一个点的速度,方向和加速度。 最后你会输出一系列的坐标点,两个点的时间间隔为t(这个t是一个非常小的t,由你事先设定好)。当t比较大的时候,如果是匀速圆周运动的话,它可能看起来不是那么圆,点比较稀疏。如果t非常小,那么点就会比较密集,看起来很圆。点越多,程序的复杂度越高,不过我相信一个c++程序跑个几十万个点还是轻轻松松的。一个具有几十万个点的圆,我相信肯定非常的圆。
这个里面 有几点需要注意的地方:
1,速度是矢量速度,不是标量。 也就是说给出的速度是(x,y)这种类型的
2,加速度也是矢量的,这样下一点的速度就非常容易计算了,直接v+at即可。就是矢量的加法
3,如果你对矢量难以把握,也可以用标量,但是运算起来会复杂一些。可能要记录上一点的方向,然后根据v*t得到运行的距离,才能得到当前点的坐标。必须记录上一点的方向,这个重要。而如果是矢量的速度,上一点的方向就不需要记录了,它就是v(这个v带有了方向)。
所谓的运动本身在更小的时间t内(例如1ms),就是从某一个坐标,运动到下一个坐标的过程。比如说匀速圆周运动。 当它在某一个点a的时候,具有速度v,加速度为a,那么在相当小的时间t内,它沿着v的方向运动到下一个点b,我们知道a和b的距离为vt。 它的当前速度为v+a*t。如果事先给出初始的坐标点,以及初始的速度,方向,加速度。那么就可以以非常小的时间间隔,计算下一个点的坐标点,以及下一个点的速度,方向和加速度。 最后你会输出一系列的坐标点,两个点的时间间隔为t(这个t是一个非常小的t,由你事先设定好)。当t比较大的时候,如果是匀速圆周运动的话,它可能看起来不是那么圆,点比较稀疏。如果t非常小,那么点就会比较密集,看起来很圆。点越多,程序的复杂度越高,不过我相信一个c++程序跑个几十万个点还是轻轻松松的。一个具有几十万个点的圆,我相信肯定非常的圆。
这个里面 有几点需要注意的地方:
1,速度是矢量速度,不是标量。 也就是说给出的速度是(x,y)这种类型的
2,加速度也是矢量的,这样下一点的速度就非常容易计算了,直接v+at即可。就是矢量的加法
3,如果你对矢量难以把握,也可以用标量,但是运算起来会复杂一些。可能要记录上一点的方向,然后根据v*t得到运行的距离,才能得到当前点的坐标。必须记录上一点的方向,这个重要。而如果是矢量的速度,上一点的方向就不需要记录了,它就是v(这个v带有了方向)。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询