我怎样才能calulate我对象(BLACK)行驶方向(绿色)的有效范围(RED)。绿色是Vector2,其中x和y的范围是-1到1.
我在这里要做的是创建火箭燃料燃烧效应。因此,我得到的是
- 火箭速度(浮点)
- 火箭方向(Vector2 X = [1,1],Y = [ - 1,1])
我可能会认为火箭的速度并不重要,因为燃油燃烧效应(粒子)是以自己的速度在位置上产生的。
我怎样才能calulate我对象(BLACK)行驶方向(绿色)的有效范围(RED)。绿色是Vector2,其中x和y的范围是-1到1.
我在这里要做的是创建火箭燃料燃烧效应。因此,我得到的是
我可能会认为火箭的速度并不重要,因为燃油燃烧效应(粒子)是以自己的速度在位置上产生的。
与2D向量A便宜欢快的关键是要调换x和y,然后翻转他们的一个标志,以获得垂直矢量(伪代码):
Vector2 perpendicular (-original.y, original.x) // Or original.y, -original.x
那么你可以做什么像:
direction + perpendicular * rand(-0.3 , 0.3)
更新:已经意识到问题问的相反矢量我想我有更好的回答太(忙着看图片!)。将方向乘以-1以得到相反的向量。所以这个:
perpendicular * rand(-0.3 , 0.3) - direction
应该的地方给你一个随机的方向向量在你的范围内(不归,但足够接近这些目的)。然后,您可以将结果乘以一个随机数,具体取决于您想要拖尾的时间。
垂直是不是(original.y,-original.x)或(-original.y,original.x) – cyon
是的,你是完全正确的。我会更新我的答案 – OlduwanSteve
如果要花费在OlduwanSteve的答案上,你可以使它在物理上有些准确。
您想要创建几个表示驱逐(红线)的向量。
首先定义要表示驱逐的向量的数量 - 让它标记n。
你想得到一组n个总和为Vx的数字。这些数字将是排出矢量的x分量。你可以这样做(半伪代码):
SumX = Vx;
for (i = 0; i < n; i++)
{
Ax[i] = -rand(0..SumX); // Ax is the array of all expulsion vectors x components
SumX -= Ax[i];
}
现在你要计算Ay(驱逐向量的y分量)。除了SumY = 0之外,这与计算十分相似。
这里不是将n个元素中的SumY分开,而是需要决定最大y分量。我可以想到的最佳方式是选择这个最大允许角度,并使用以下公式来定义最大Vy:maxVy = minVx * tan(maxAlpha)。
现在你可以使用这个(半伪代码)好哦:
SumY = maxVy*2; // The actual range is (-maxVy, maxVy), but using (0, 2*maxVy) is simpler IMO
for (i = 0; i < n; i++)
{
Ay[i] = rand(0..SumY);
SumY -= Ay[i];
}
for (i = 0; i < n; i++)
{
Ay[i] -= maxVy; // Translate the range back to (-maxVy, maxVy) from (0, 2*maxVy)
}
现在你有x和驱逐向量的y分量两者的阵列。迭代两个数组并将元素配对以创建向量(您不必按相同顺序迭代两个数组)。
注:
•我对齐的轴发生了我的计算,使得X是平行于所述物体的速度矢量(绿线)。 •maxVy的计算确实是不是保证将生成一个角度为maxAlpha的矢量,它只能保证没有大角度的矢量。 •线条Ay [i] = rand(0..SumY)和Ax [i] = -rand(0..SumX)可能会导致大小为0的矢量。这可能会导致令人讨厌的场景,我会建议处理这种情况(例如,“兰德返回零,再次调用它”)。
我想你可以将它移入数学网站?这个问题涉及到一些代数和三角。 – CyberDude
火箭科学;)你是否试图通过给定的点来计算与飞机垂直的矢量? – bonCodigo
[一个帖子得到一个想法](http://stackoverflow.com/questions/11650339/find-perpendicular-line-and-its-intersection-to-a-rectangle) – bonCodigo