首页 文章

如何计算Arc中终点的坐标如果中心和起始坐标在Android中已知为扫描角度?

提问于
浏览
5

我正在绘制一个饼图,其中我绘制了具有已知扫描角度的弧 . 现在我想在每个弧的中心显示标签,或者说从每个弧的中心绘制一条线 .

鉴于我知道中心坐标,起始坐标,扫掠角和半径,我想计算结束坐标 .

我也尝试过绘制一个匹配所有坐标的三角形并使用距离公式,但我不知道如何在java中求解方程式 .

请给我一个合适的解决方案 .

2 回答

  • 6

    在矢量中工作 . 设 A 是从圆心到弧开始的向量 . 计算一下

    A = start_point - centre
    

    theta 为扫掠角(以弧度为单位) . 使用旋转矩阵围绕圆心旋转圆弧开始 . http://en.wikipedia.org/wiki/Rotation_matrix

    明确地说,

    newpoint_x = cos(theta)*A_x + sin(theta)*A_y
    newpoint_y = -sin(theta)*A_x + cos(theta)*A_y
    

    其中 A_xA 的x分量(和 A_y 类似) . 然后

    newpoint = centre + (newpoint_x,newpoint_y)
    

    是你想要的 . 可能是这个点出现了错误的旋转方式(逆时针方向),如果是这样,只需使用即可

    theta = -theta
    

    代替 . 这应该适合你 .

    如果要评估弧的中点,只需使用

    theta = theta / 2
    
  • 1
    StartAngle = atan2(StartY-CenterY, StartX - CenterX) 
    EndX = CenterX + Radius * Cos(StartAngle + SweepAngle)
    EndY = CenterY + Radius * Sin(StartAngle + SweepAngle)
    

    另一种方式:制作矩阵产品

    shift by (Center - Start)
    rotation by SweepAngle
    back shift
    

    并将此矩阵应用于起始点(多重矩阵和向量)

相关问题