绘制两点之间的路径

时间:2010-11-22 17:24:52

标签: c# math windows-phone-7 xna

我正在开发一款基于触控的游戏,而且我在绘制用户触及的路径方面遇到了问题。 我试图模仿这些应用http://www.youtube.com/watch?v=G3CECr6mT1Qhttp://www.youtube.com/watch?v=r34-_0wrVC4

之类的内容

我在XNA / C#中这样做。

我的问题是:我有一组定义用户触摸路径的路标。我不确定如何在所有这些点之间得到一条风格化的线,所以我想“嘿,我将只有一个非常小的图像'线',并在航点之间的每个点绘制它,并相应地旋转它如果这是最佳解决方案,我不确定。

但我被卡住了,因为我不知道如何获得这两点之间的所有坐标。我有两点,我可以得到从第一个到第二个的矢量等,但我似乎无法得到正确的数学。

有任何建议或帮助吗? 谢谢!

3 个答案:

答案 0 :(得分:5)

要计算两点之间的中间点,找到从一个点到另一个点的方向向量以及点之间的距离。将距离缩放0到1之间的因子t,其中t = 0对应于第一点t = 0.5是它们之间的中间,t = 1对应于第二点。然后按此值缩放方向向量并将其添加到原始点。

Vector2 IntermediatePoint(Vector2 p0, Vector2 p1, float t)
{
    Vector2 delta = p1 - p0;

    float distance = delta.Length();

    if (distance == 0.0f)
    {
        return p0;
    }
    else
    {
        Vector2 direction = delta / distance;

        return p0 + direction * (distance * t);
    }
}

如果计算p0和p1之间的多个点,则只应计算一次距离和方向。

您还可以考虑使用XNA RoundLine来连接您的积分。

另一个建议是set up a textured rotated quad

答案 1 :(得分:1)

pointA = waypointsToDraw.ElementAt(i);
pointB = waypointsToDraw.ElementAt(i + 1);
deltaVector = pointB - pointA;
distance = deltaVector.Length();
direction = deltaVector / distance;
for (int z = 1; z < distance; z++)
{
    newPoint = pointA + direction * (distance * (z/distance));
    //this is the newPoint - it will be every point/pixel between pointA and pointB. Put drawing code here

}

上面的代码示例。 PointS和B点是两个端点,newPoint将是它们之间的每一个点

答案 2 :(得分:0)

查看http://create.msdn.com/en-US/education/catalog/sample/primitives处的样本,了解如何绘制包含直线的简单“基元”的详细信息。