如何根据起始角度计算弧长?

时间:2018-08-18 12:36:03

标签: d3.js math svg trigonometry pythagorean

我正在构建一个道路编辑器,可以在其中将预定义的路段拖动到一起,然后将它们组合到连接的道路上。这些线段之一是右曲线。 enter image description here

该曲线绘制为SVG(使用D3弧路径功能),并具有两个手柄以直接在SVG内更改半径和长度(黑色小圆圈更改长度,黑色小方形更改半径)。我在手柄上使用了d3拖动处理程序。

要计算新的圆心角,请执行以下操作:

  1. 从圆弧的中心点获取YOffset
  2. 翻转YOffset(以匹配屏幕y和数学)
  3. 使用毕达哥拉斯(x = Math.sqrt(r ^ 2-YOffset ^ 2))获得相应的x值
  4. 获取相应的中心角(Math.PI / 2-Math.atan2(YOffset,x);

只有在圆弧从PI / 2开始时才有效,如图所示。如果我添加具有任意起始角度的其他弧(请参见下图,红色弧),则我的解决方案将无法工作。

enter image description here

我正在寻找一种通用的解决方案,因此无论其起始角度如何,它都能适用于任何弧形。

1 个答案:

答案 0 :(得分:0)

对我来说,这似乎不是编程问题,而是数学问题。我了解的是:给定起点(x₁, y₁),终点(x₂, y₂)和半径r,α的角度是多少? enter image description here

您可以计算两点之间的距离d。它的长度的一半是直角三角形的远端,以r作为其假设。 d/2r是近角的窦;将其加倍,您将在端点之间形成角度。

(而且,α以弧度表示,路径长度就是α * r。)