【问题标题】:Find the normal "N" on an ellipses through a point on a cross section通过横截面上的一点找到椭圆上的法线“N”
【发布时间】:2012-11-11 18:19:53
【问题描述】:
我正在尝试在我制作的一个小型物理引擎中制作一个不错的偏转效果。现在它很好地偏离了多边形边缘的法线。但不是制作一个有 100 条边的多边形来获得“圆形偏转”的平滑效果,我想我可以使用椭圆来计算偏转法线。
所以,我真正想要的是一个函数,它在一条线段上取一个点 P 并返回一个假想 圆周上的正常 N >椭圆(w,h)。详情见附图。
要在椭圆的圆周上得到一个点,我很确定它是:
x=P.x+Math.sin()*w
y=P.y+Math.cos()*h
但是我怎样才能从中获得正常呢?
Here's a fiddle 尝试执行 BDO Adams 博士的答案。
【问题讨论】:
标签:
geometry
ellipse
normals
【解决方案1】:
椭圆点的方程是
x=x_centre+a*cos(t)
y=y_centre+b*sin(t)
对于椭圆的每个点,您可以找到 t 和 atan2( (y-y_centre)/b , (x-x_centre)/a )
当知道t的切线方向就可以确定了:dx/dt,dy/dt:
dx=-a*sin(t)
dy=b*cos(t)
知道切线方向后,只需将其旋转 90 度即可获得法线:
nx=b*cos(t)
ny=a*sin(t)
为了避免计算t,我们可以将它与前两个公式结合起来:
nx=(x-x_centre)*b/a
ny=(y-y_centre)*a/b
【解决方案2】:
首先使用atan2函数获取法线的角度,并从中获取向量
theta = atan2(2y/semiminorradius, x/semimajorradius)
ny = semiminorradius * sin(theta)
nx = semimajorradius * cos(theta)
您需要对法线向量进行归一化吗? (单位长度)如果是这样
r = sqrt(tx^2+ty^2)
nny = ny/r
nnx = nx/r
当你画它时,点实际上是 (ny,nx)
【讨论】:
-
我试图实现这个here,但得到的单位向量~(0.55,0.83) 看起来不正确。我希望像 (0,1) 或 (0,-1) 这样的东西。