设置二维向量的大小

Setting the magnitude of a 2D Vector

尝试使用 p5.js 库移植我在 javascript 中制作的东西,该库具有用于 2D 向量的 setMag 函数

这是documentation for it

如何在 ROBLOX/lua 中设置二维矢量的大小?

function particle:update(mouseX,mouseY)
    local t=(Vector2.new(mouseX,mouseY)-(self.pos)).unit.setMag(self.acc)
    self.thrust=t
    self.vel = self.vel + self.thrust
    if self.vel.magnitude>self.maxspeed then
          self.vel.unit.setMag(self.maxspeed)
    end
    self.pos=self.pos+(self.vel)
    self.frame.Position=UDim2.new(0,self.pos.x,0,self.pos.y)
end

让向量分量为 vx, vy。它的当前星等是

Mag = Math.Sqrt(vx * vx + vy * vy)
//as Piglet noticed in comment, you can use magnitude property

要使向量具有相同的方向但改变幅度,只需将分量乘以幅度比:

new_vx = vx * New_Mag / Mag
new_vy = vy * New_Mag / Mag

在 roblox 中设置矢量大小的正确方法是简单地获取单位矢量并将其乘以您希望矢量的长度:

function SetMagnitude(vec, mag)
    return vec.unit*mag
end

单位向量是一个方向相同的向量,但幅度为 1,这就是为什么它会起作用的原因:)

这本质上是对 MBo 的回答注释内容的简化:

new_vx = vx * New_Mag / Mag
new_vy = vy * New_Mag / Mag

因为通过将一个向量乘以一个数,您将它的所有分量都乘以该数:

new_v = v * New_Mag / Mag

并且因为 v.unit 的震级为 1:

new_v = v.unit * New_Mag / 1

任何数字除以 1 就是它本身:

new_v = v.unit * New_Mag

所以您基本上可以认为我所说的 "correct way" 不仅仅是一种 替代方法 ,而是 一种更高效、更清洁的解决方案.