Geometry 如何获取椭圆上的点';给轮廓一个角度?

Geometry 如何获取椭圆上的点';给轮廓一个角度?,geometry,ellipse,Geometry,Ellipse,所以,我给出了椭圆——它们由中点、水平半径(rh)和垂直半径(rv)定义。我使用sin/cos绘制它们,结果对我来说相当不错(只是确保这不是错误源) 现在假设我有一个给定的角度(或方向向量),我希望椭圆轮廓上的点具有该角度/方向。我直观的方法是简单地使用方向向量,将其归一化,并将其x分量与rh相乘,将其y分量与rv相乘。现在,我写的程序和我在纸上做的所有计算都给出了另一个点,而不是我想要的点,尽管它仍然在椭圆的轮廓上。但是,如果方向是(1,0)、(0,1)、(1-1,0)、(0,-1)中的一个方

所以,我给出了椭圆——它们由中点、水平半径(rh)和垂直半径(rv)定义。我使用sin/cos绘制它们,结果对我来说相当不错(只是确保这不是错误源)

现在假设我有一个给定的角度(或方向向量),我希望椭圆轮廓上的点具有该角度/方向。我直观的方法是简单地使用方向向量,将其归一化,并将其x分量与rh相乘,将其y分量与rv相乘。现在,我写的程序和我在纸上做的所有计算都给出了另一个点,而不是我想要的点,尽管它仍然在椭圆的轮廓上。但是,如果方向是(1,0)、(0,1)、(1-1,0)、(0,-1)中的一个方向,则此方法效果很好(因此它适用于0°、90°、180°、270°)

尽管互联网上有大量关于椭圆本身的数据,但我找不到关于我的问题的任何信息——而且我也找不到比上述更好的解决方案


那么,您知道如何实现这一点吗?

您是正确的-参数化角度与所需点与X轴之间的角度不同。但是,它们的切线是成比例的(系数为
rh/rv
),因此可以使用这种方法:

  • 获取所需角度的切线
  • 将此切线乘以
    rh/rv
  • 用于从切线计算正弦和余弦
  • 根据参数(中点、右侧、右侧)缩放/定位点
在Python中:

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度时使用参数化角度可以得到正确的结果。使用椭圆的极坐标形式,你应该得到你想要的点