Rob*_*öld 4 geometry ellipse normals
我正在尝试在我制作的一个小物理引擎中制作一个很好的偏转效果。现在它很好地偏离了多边形边缘的法线。但是,与其制作具有 100 条边的多边形以获得“圆形偏转”的平滑效果,我想我可以使用椭圆来计算偏转法线。
所以,我真正想要的是一个函数,它在一个线段上取一个点P并返回一个假想椭圆(w,h)的圆周上的法线N。有关详细信息,请参阅附图。

要在椭圆的圆周上得到一个点,我很确定它是:
x=P.x+Math.sin()*w
y=P.y+Math.cos()*h
Run Code Online (Sandbox Code Playgroud)
但我怎么能从中得到正常呢?
椭圆点的方程是
x=x_centre+a*cos(t)
y=y_centre+b*sin(t)
Run Code Online (Sandbox Code Playgroud)
对于椭圆形的每一个点,你可以找到t如atan2( (y-y_centre)/b , (x-x_centre)/a )
当你知道t切线方向可以确定dx/dt,dy/dt:
dx=-a*sin(t)
dy=b*cos(t)
Run Code Online (Sandbox Code Playgroud)
当您知道切线方向时,只需将其旋转 90 度即可获得法线:
nx=b*cos(t)
ny=a*sin(t)
Run Code Online (Sandbox Code Playgroud)
为了避免计算,t我们可以将它与前两个公式结合起来:
nx=(x-x_centre)*b/a
ny=(y-y_centre)*a/b
Run Code Online (Sandbox Code Playgroud)