Geometry 如何获取椭圆上的点';给轮廓一个角度?
所以,我给出了椭圆——它们由中点、水平半径(rh)和垂直半径(rv)定义。我使用sin/cos绘制它们,结果对我来说相当不错(只是确保这不是错误源) 现在假设我有一个给定的角度(或方向向量),我希望椭圆轮廓上的点具有该角度/方向。我直观的方法是简单地使用方向向量,将其归一化,并将其x分量与rh相乘,将其y分量与rv相乘。现在,我写的程序和我在纸上做的所有计算都给出了另一个点,而不是我想要的点,尽管它仍然在椭圆的轮廓上。但是,如果方向是(1,0)、(0,1)、(1-1,0)、(0,-1)中的一个方向,则此方法效果很好(因此它适用于0°、90°、180°、270°) 尽管互联网上有大量关于椭圆本身的数据,但我找不到关于我的问题的任何信息——而且我也找不到比上述更好的解决方案Geometry 如何获取椭圆上的点';给轮廓一个角度?,geometry,ellipse,Geometry,Ellipse,所以,我给出了椭圆——它们由中点、水平半径(rh)和垂直半径(rv)定义。我使用sin/cos绘制它们,结果对我来说相当不错(只是确保这不是错误源) 现在假设我有一个给定的角度(或方向向量),我希望椭圆轮廓上的点具有该角度/方向。我直观的方法是简单地使用方向向量,将其归一化,并将其x分量与rh相乘,将其y分量与rv相乘。现在,我写的程序和我在纸上做的所有计算都给出了另一个点,而不是我想要的点,尽管它仍然在椭圆的轮廓上。但是,如果方向是(1,0)、(0,1)、(1-1,0)、(0,-1)中的一个方
那么,您知道如何实现这一点吗?您是正确的-参数化角度与所需点与X轴之间的角度不同。但是,它们的切线是成比例的(系数为
rh/rv
),因此可以使用这种方法:
- 获取所需角度的切线
- 将此切线乘以
rh/rv
- 用于从切线计算正弦和余弦
- 根据参数(中点、右侧、右侧)缩放/定位点
from math import copysign, cos, sin, sqrt
class Ellipse:
def __init__(self, mx, my, rh, rv):
self.mx = mx
self.my = my
self.rh = rh
self.rv = rv
def pointFromAngle(self, a):
c = cos(a)
s = sin(a)
ta = s / c ## tan(a)
tt = ta * self.rh / self.rv ## tan(t)
d = 1. / sqrt(1. + tt * tt)
x = self.mx + copysign(self.rh * d, c)
y = self.my + copysign(self.rv * tt * d, s)
return x, y
如果我理解你的要求,那么我认为你需要的是从椭圆中心测量角度的位置。使用这种形式的椭圆,您将能够计算给定θ选择的椭圆半径值,然后绘制您的点 如果您查看此gif图像,您将看到为什么在θ=90、180、270和360度时使用参数化角度可以得到正确的结果。使用椭圆的极坐标形式,你应该得到你想要的点