使用矢量基于旋转和速度绘制船的路线

时间:2012-08-13 15:01:50

标签: math language-agnostic vector linear-algebra

我有一个海战比赛,我试图向我的用户显示他的船将根据速度和转速采取的航线。也就是说,我尝试实现类似于下图的内容。如您所见,能够采用红色路线的船具有比蓝色船更快的旋转速度。现在,我不知何故需要找到一种基于速度,转速和所需方向计算最终运动矢量的方法,但我还不知道如何。任何想法都赞赏!

ships

2 个答案:

答案 0 :(得分:2)

我猜这是因为这是一场游戏,而不是准确的海事模拟,你只是想找到一种创建轨迹图的方法。

这将最好用一个简单的迭代/参数方法来处理,假设一个足够小的时间步长它将形成一个体面的曲线。请记住,曲线没有简单的函数形式,它必须用点数组表示。

伪代码(Matlab / Octave样式语法)

Given: StartX, StartY, StartHeading, EndX, EndY, MaxSpeed, MaxRotationRate
-----------------------------------------------------------------------------

MaxDisplacement = Max Speed * deltaT
MaxRotation = MaxRotationRate * deltaT

CurrentX = StartX
CurrentY = StartY
CurrentHeading = StartHeading

Trajectory = []

While [CurrentX, CurrentY] != [EndX, EndY]
    % Store the Current Position by appending to results
    Trajectory = [Trajectory; [CurrentX, CurrentY, CurrentHeading]]

    % Get the vector form of the current heading and the straight-line path
    HeadingVector = [cos(CurrentHeading),sin(CurrentHeading)]
    DirectVector = [EndX - CurrentX, EndY - CurrentY]

    % Some simple vector math here using dot products and cross products
    RequiredRotation = arccos(dotP(HeadingVector,DirectVector)/abs((HeadingVector)*abs(DirectVector))
    RotationDirection = sign(crossP(HeadingVector,DirectVector))

    % Clip the rotation rate based on the maximum allowed rotation
    if RequiredRotation > MaxRotation
        RequiredRotation = MaxRotation

    % Update the position based on the heading information
    CurrentX = CurrentX + cos(RequiredRotation) * MaxDisplacement
    CurrentY = CurrentY + sin(RequiredRotation) * MaxDisplacement
    CurrentHeading = CurrentHeading + RequiredRotation * RotationDirection
Loop

Return Trajectory

此代码在到达端点时遇到一些问题,我将由您决定如何最好地处理它。两个明显的问题:由于船舶始终以最大速度移动,船舶将按写入方式超过终点;如果终点距离太近而无法转向,那么该船可能会“陷入轨道”。对此有多种解决方法,这取决于您希望游戏如何处理此问题。

几何解决方案

另一种方法是进行更多的核心几何计算(精确解)。

首先,您需要计算转弯半径而不是最大转弯率。从那里,考虑到船舶的当前位置和航向,可以识别船舶可以采取的两个“转弯圈”。选择正确的中心点 C ,然后在圆上计算正确的相切点 T 。最终路径将是弧(开始,结束,中心),后跟一个线段。

Arc Line Segment Path

答案 1 :(得分:1)

这可能不是您的确切答案,但我相信您想要的公式是这样的:

这里U是物体的四速度,Γ表示坐标系的64个连接系数或Christoffel符号。请注意,希腊语下标有四个可能的值,即0表示时间轴,1-3表示空间坐标轴,重复索引用于表示该索引的所有值的总和。

这组四个方程式的左侧(指数λ的时间和三个空间值各一个)是从有利位置看到的对象的适当加速3向量与零时间成分的组合参考书或簿记员坐标系。右侧的第一项列出了对象的四速U的时间(能量/ mc)和类似空间(动量/ m)分量在旅行者时钟上每单位时间τ变化的速率。 / p>

如您所见,它不是QUITE线性代数。 :)