2

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

这是它的文档

如何在 ROBLOX/lua 中设置 2D 向量的大小?

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
4

2 回答 2

8

让我们的向量分量是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
于 2016-12-25T12:34:32.870 回答
1

在 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

因此,您基本上可以将我所说的“正确方法”视为一种替代方法,而是一种更有效、更清洁的解决方案。

于 2016-12-25T19:09:07.043 回答