2016-12-24 80 views
0

使用具有二维一个setMag功能载体设置的二维矢量

这里的documentation for it

如何设置的幅度p5.js库试图港口的东西我在javascript所做的幅度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 
+0

如果你不知道相关数学的基础知识,你如何编程矢量东西......如果你不明白你在做什么,你总是会遇到问题。 – Piglet

+0

我同意@piglet这个东西需要数学和API的知识。你显然没有一个合理的理解。在我的回答中,我将这两者结合在一起,否则就不会有人想到。 – warspyking

回答

2

让我们的矢量组件是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

Roblox向量提供幅度属性http://wiki.roblox.com/index.php?title=Vector2#Magnitude_property – Piglet

+0

这可以进一步简化,请参阅我的答案以获取更多详细信息。 – warspyking

1

设置在roblox一个向量的大小的正确方法简单地通过想要多久的单位向量和乘以它的矢量为:

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

该单位矢量是在方向而言相同的向量,howev ER为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 

所以你基本上可以想到的是我说的“正确的方式”不只是一个替代方式,但更高效,更清洁的解决方案。