Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python查找椭圆上已知点的投影点_Python_Projection - Fatal编程技术网

Python查找椭圆上已知点的投影点

Python查找椭圆上已知点的投影点,python,projection,Python,Projection,我需要实施这个过程: 关于下图,我知道红点的坐标。我必须找到椭圆中红色点的投影,从而找到椭圆的紫色点 我有橙色线的点和椭圆的点 是否有任何可用的算法可以做到这一点?您可以在红点处构造一个具有非右顶点的直角三角形,然后这将允许您计算从投影点到橙色线的距离,该投影点到紫色点的长度相同 三角形构造可以从在红色点之间构造一条线(a)开始,找到原点和橙色线之间的角度(角度B)。从这里开始,A线和右顶点线之间的角度为90-(角度B)。然后和弦的长度随之变化 设从“中心”红点c到另一个红点r的向量为u,从中心

我需要实施这个过程:

关于下图,我知道红点的坐标。我必须找到椭圆中红色点的投影,从而找到椭圆的紫色点

我有橙色线的点和椭圆的点


是否有任何可用的算法可以做到这一点?

您可以在红点处构造一个具有非右顶点的直角三角形,然后这将允许您计算从投影点到橙色线的距离,该投影点到紫色点的长度相同

三角形构造可以从在红色点之间构造一条线(a)开始,找到原点和橙色线之间的角度(角度B)。从这里开始,A线和右顶点线之间的角度为90-(角度B)。然后和弦的长度随之变化

设从“中心”红点c到另一个红点r的向量为u,从中心红点到橙色线上某个其他点的向量为v。我们希望通过uv之间的两倍角度旋转u。设θ为uv之间的角度。我们可以取两倍θ的a,然后乘以u,得到从红色“中心”点c到紫色点p的向量。因为我们知道红色点线和橙色点线之间的夹角的余弦,所以我们不需要取任何角度的正弦或余弦,我们可以用向量等来表示

你可能可以把它归结为一个更简单的方程式,但这是一个反映“展示你的作品”的算法:

  • 求余弦(θ)为u*v/||u|||v||

  • 使用and恒等式从余弦(θ)求余弦(2θ)和正弦(2θ)

  • 构建

  • 将旋转矩阵乘以u,得到w,即从c到p的向量

  • w的分量加到c的坐标中,得到p的坐标


鉴于您没有指定点和线方程的精确形式,我将采用以下表示法:橙色线穿过原点并沿着向量
[v1,v2]
,因此它上的每个点都可以写成
a*[v1,v2]
。鉴于此,以下方法应可行:

  • 求与v垂直的向量(我称之为n):形式为n=[-(v2*n2)/v1,n2]且n2非零的向量

  • 通过沿着n的红点(而不是原点)绘制线:
    [r1,r2]+b*[-(v2*n2)/v1,n2]
    描述了任何这样的点

  • 找到这些线相交的参数a和b:求解a和b的av1=r1-b(v2*n2)/v1和a*v2=r2*b*n2。b的结果,即您需要的结果由以下公式给出:

    b= (v1*(r1*v1-r2*v1))/(n2*(v1^2 + v2^2))
    
  • 紫色点将具有您选择的n2的坐标
    [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种可能的方法可以解决这个问题,但这似乎是最好的。顺便问一下,椭圆的目的是什么?