设置一个二维向量的大小

尝试使用 p5.js 库中的 setMag 函数移植我在 javascript 中编写的内容

以下是文档链接

如何在 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
点赞
用户844416
用户844416

假设我们向量的分量为 vx, vy,其当前大小为

Mag = Math.Sqrt(vx * vx + vy * vy)
//正如 Piglet 在评论中提到的那样,您还可以使用 magnitude 属性

若要创建具有相同方向但大小不同的向量,请将分量乘以大小比例:

new_vx = vx * New_Mag / Mag
new_vy = vy * New_Mag / Mag
2016-12-25 12:34:32
用户3979429
用户3979429

在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-25 19:09:07