如何用Double向量相乘

本文关键字:向量 Double 何用 | 更新日期: 2023-09-27 18:11:16

我想让一个精灵来回移动,这里有一个等式:

SpriteTexture sprite;
Vector2 position;
Vector2 p1 = new Vector2(0, 100), 
        p2 = new Vector2(0, 0);
double currentTime = 0, timestep = 0.01;
...    
protected override void Update(GameTime gameTime)
{
 position = currentTime * p1 + (1 - currentTime) * p2;
 currentTime += timestep;
 if (currentTime >= 1 || currentTime <= 0)
 {
   timestep *= -1;
 }
}

我一直得到错误:"操作符'*'不能应用于'double'类型和Microsoft.Xna.Framework.Vector2"

如何用Double向量相乘

尝试使用Vector2.Multiply或将double转换为float,并将Vector2乘以currentTime

1。

position = Vector2.Multiply(p1, (float)currentTime) +
    Vector2.Multiply(p2, (float)(1 - currentTime));

2。

position = (p1 * (float)currentTime) + (p2 * (float)(1 - currentTime));

Vector2支持浮点数乘法,或者您可以手动将vector的各个组成部分乘以double(您将其强制转换为float)。

例如:

 position = currentTime * (float)p1 + ((float)(1 - currentTime)) * p2;

或者如果你想对一个向量做单独的乘法运算

 // Assuming myVector is a Vector3:
 myVector.X *= (float)someDoubleValue;
 myVector.Y *= (float)someDoubleValue;
 myVector.Z *= (float)someDoubleValue;

尝试使用:

Vector2.Multiply Method (Vector2, Single)

API如下:

http://msdn.microsoft.com/en-us/library/bb198129.aspx

不能使用*操作符将vector与double类型的对象相乘,这就是导致错误的原因。

这一行出现问题

position = currentTime * p1 + (1 - currentTime) * p2

您正在尝试将currentTimedoublep1Vector实例相乘。

要对Vector实例进行乘法运算,需要使用Vector。用