python - 椭圆旋转θ角后椭圆与直线的交点

标签 python math line intersection ellipse

我想在将椭圆旋转角度 theta 后找到椭圆和直线的交点。

我已经编写了 python 代码来查找椭圆和直线的交点,但我无法弄清楚如何在将椭圆旋转 θ 角后找到交点。

def intersactionPoints(a,b,h,k,x1,y1,x2,y2):
    #xi1, yi1, xi2, yi2 <- intersection points
    xi1, yi1, xi2, yi2, aa, bb, cc, m = 0, 0, 0, 0, 0, 0, 0, 0
    if x1 != x2:
        m = (y2 - y1)/(x2 - x1)
        c = y1 - m * x1
        aa = b * b + a * a * m * m
        bb = 2 * a * a * c * m - 2 * a * a * k * m - 2 * h * b * b
        cc = b * b * h * h + a * a * c * c - 2 * a * a * k * c + a * a * k * k - a * a * b * b
    else:
        # vertical line case
        aa = a * a
        bb = -2.0 * k * a * a
        cc = -a * a * b * b + b * b * (x1 - h) * (x1 - h)
    d = bb * bb - 4 * aa * cc
    # intersection points : (xi1,yi1) and (xi2,yi2)
    if d > 0:
        if (x1 != x2):
            xi1 = (-bb + (d**0.5)) / (2 * aa)
            xi2 = (-bb - (d**0.5)) / (2 * aa)
            yi1 = y1 + m * (xi1 - x1)
            yi2 = y1 + m * (xi2 - x1)
        else:
            yi1 = (-bb + (d**0.5)) / (2 * aa)
            yi2 = (-bb - (d**0.5)) / (2 * aa)
            xi1 = x1
            xi2 = x1
    return xi1, yi1, xi2, yi2


if __name__ == "__main__":
    a =  #major axis
    b =  #minor axis
    h =  #center x of ellipse
    k =  #center y of ellipse
    x1 =  #line coordinate x1
    y1 =  #line coordinate y1
    x2 = #line coordinate x2
    y2 = #line coordinate y2
    xi1, yi1, xi2, yi2 = intersactionPoints(a,b,h,k,x1,y1,x2,y2)

最佳答案

如果您已经测试并准备好使用轴对齐椭圆的解决方案,那么将定义线的点转换为椭圆系统,找到交点,然后进行反向转换就简单多了。

对于以原点为中心的椭圆和旋转角度theta

 x1' = x1 * Cos(theta) + y1 * Sin(theta)
 y1' = - x1 * Sin(theta) + y1 * Cos(theta)

对于以 cx, cy 为中心的椭圆:

 x1' = (x1 - cx) * Cos(theta) + (y1 - cy) * Sin(theta)
 y1' = - (x1 - cx) * Sin(theta) + (y1 - cy) * Cos(theta)

关于python - 椭圆旋转θ角后椭圆与直线的交点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54667599/

相关文章:

objective-c - 如何检测可拖动线上的触摸(使用 drawRect 绘制)

c++ - Qt 代码编辑器在右侧区域显示行号

python - 将curl命令从google-colab转换为python脚本

python - python中列表的可变性

python - 使用 QGraphicsScene::addItem 将 QPixmap 项添加到 QGraphicsScene 会导致 PySide 崩溃

c - 整数除法的行为是什么?

python - xarray : calculate time-series of daily anomalies from *local* monthly means

Java计算MPG错误

javascript - 你如何从 CSS transform rotate(deg) 规则中找到变换矩阵?

c# - ObservableCollection<Line> 未在 UI 上更新