Python查找椭圆上已知点的投影点
我需要实施这个过程: 关于下图,我知道红点的坐标。我必须找到椭圆中红色点的投影,从而找到椭圆的紫色点 我有橙色线的点和椭圆的点Python查找椭圆上已知点的投影点,python,projection,Python,Projection,我需要实施这个过程: 关于下图,我知道红点的坐标。我必须找到椭圆中红色点的投影,从而找到椭圆的紫色点 我有橙色线的点和椭圆的点 是否有任何可用的算法可以做到这一点?您可以在红点处构造一个具有非右顶点的直角三角形,然后这将允许您计算从投影点到橙色线的距离,该投影点到紫色点的长度相同 三角形构造可以从在红色点之间构造一条线(a)开始,找到原点和橙色线之间的角度(角度B)。从这里开始,A线和右顶点线之间的角度为90-(角度B)。然后和弦的长度随之变化 设从“中心”红点c到另一个红点r的向量为u,从中心
是否有任何可用的算法可以做到这一点?您可以在红点处构造一个具有非右顶点的直角三角形,然后这将允许您计算从投影点到橙色线的距离,该投影点到紫色点的长度相同 三角形构造可以从在红色点之间构造一条线(a)开始,找到原点和橙色线之间的角度(角度B)。从这里开始,A线和右顶点线之间的角度为90-(角度B)。然后和弦的长度随之变化 设从“中心”红点c到另一个红点r的向量为u,从中心红点到橙色线上某个其他点的向量为v。我们希望通过u和v之间的两倍角度旋转u。设θ为u和v之间的角度。我们可以取两倍θ的a,然后乘以u,得到从红色“中心”点c到紫色点p的向量。因为我们知道红色点线和橙色点线之间的夹角的余弦,所以我们不需要取任何角度的正弦或余弦,我们可以用向量等来表示 你可能可以把它归结为一个更简单的方程式,但这是一个反映“展示你的作品”的算法:
- 求余弦(θ)为u*v/||u|||v||
- 使用and恒等式从余弦(θ)求余弦(2θ)和正弦(2θ)
- 构建
- 将旋转矩阵乘以u,得到w,即从c到p的向量
- 将w的分量加到c的坐标中,得到p的坐标
[v1,v2]
,因此它上的每个点都可以写成a*[v1,v2]
。鉴于此,以下方法应可行:
[r1,r2]+b*[-(v2*n2)/v1,n2]
描述了任何这样的点b= (v1*(r1*v1-r2*v1))/(n2*(v1^2 + v2^2))
[r1,r2]+2*b*[-(v2*n2)/v1,n2]
因为椭圆是关于给定直线对称的,所以您只需要计算点在直线上的反射 这里
x1
和y1
是红点的坐标,ax+by+c=0
是直线的方程式x
,y
是反射点的坐标
由于该行通过原点,c
为0
如果知道直线与x轴的夹角(θ),则可以计算a
和b
的值
我们知道,y=x*tan(θ)
和ax+by0
-a/b = tan(θ)
取b=1
,a
变成-tan(θ)
参考资料:您能说得更清楚些吗?你能给出一个简单的图表和/或所需的函数来支持你的解决方案吗?这条线总是经过原点吗?椭圆的中心总是原点吗?@shryashssarnayak对这两个都是肯定的!在它目前的形式中,这是一个数学问题,而不是编码问题,所以你在这方面可能会更幸运。但是你应该对你掌握的信息更具体一点。我想你的意思是你有橙色线和椭圆的方程;如果你能给出一个明确的例子,让我们知道这些方程是什么形式的,那会很有帮助。@PM2Ring我没有方程,但我分别有所有对应的点。你能改变基准吗(所以你的椭圆轴是x'和y',那么蓝点的坐标是:(x''u红色,-y''u红色)然后你再换一个基数,有5000种可能的方法可以解决这个问题,但这似乎是最好的。顺便问一下,椭圆的目的是什么?