【问题标题】:Deduce center of circle from portion of circumference从圆周的一部分推导出圆心
【发布时间】:2022-11-19 03:05:48
【问题描述】:

我有形成弧(?)的点序列。我想为这些点推断出最适合的圆形(甚至椭圆体)曲线。每条弧在其长度上都有相对一致的角度变化(这部分是我隔离它们的方式)。

一个算法会很棒(特别是如果解释的话我可以理解它),但由于这可能是已知的领域,所以指向答案的指针也很好。如果一切都失败了,一些更好的搜索词将不胜感激。

(我精通 c/java/kotlin 语言,所以类似的解决方案对我来说是最简单的,但我很乐意使用任何语言或伪代码工作)。

提前致谢

【问题讨论】:

    标签: geometry


    【解决方案1】:

    计算外接圆的圆心有3个点坐标就够了。来自维基百科,Cartesian coordinates of Circumscribed circle

    然后中心是S/a

    正如提到的任何语言一样,Python 中都有实现:

    import numpy as np
    
    A = np.array([0, 0])
    B = np.array([2, 0])
    C = np.array([0, 2])
    
    lenASquare = A.dot(A)
    lenBSquare = B.dot(B)
    lenCSquare = C.dot(C)
    
    SxMatrix = np.array([
        [lenASquare, A[1], 1],
        [lenBSquare, B[1], 1],
        [lenCSquare, C[1], 1]
    ])
    
    SyMatrix = np.array([
        [A[0], lenASquare, 1],
        [B[0], lenBSquare, 1],
        [C[0], lenCSquare, 1]
    ])
    
    SxDet = np.linalg.det(SxMatrix)
    SyDet = np.linalg.det(SyMatrix)
    
    Sx = 0.5 * SxDet
    Sy = 0.5 * SyDet
    
    aMatrix = np.array([
        [A[0], A[1], 1],
        [B[0], B[1], 1],
        [C[0], C[1], 1]
    ])
    a = np.linalg.det(aMatrix)
    S = np.array([Sx/a, Sy/a])
    
    print('A: ', A)
    print('B: ', B)
    print('C: ', C)
    print('Circumcircle center: ', S)
    

    输出:

    A:  [0 0]
    B:  [2 0]
    C:  [0 2]
    Circumcircle center:  [1. 1.]
    

    【讨论】:

      猜你喜欢
      • 2015-07-04
      • 1970-01-01
      • 2018-08-24
      • 1970-01-01
      • 1970-01-01
      • 2017-06-24
      • 2020-12-17
      • 2019-02-13
      • 1970-01-01
      相关资源
      最近更新 更多