设置2D矢量的大小

时间:2016-12-24 22:29:39

标签: math vector lua roblox magnitude

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

这里是documentation for it

如何在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

2 个答案:

答案 0 :(得分:3)

让我们的向量组件为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

答案 1 :(得分: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

所以你基本上可以想到我所说的"正确的方式"不仅仅是替代方式,而是更有效,更清洁的解决方案。