【问题标题】:Algorithm - Find the midpoint of an arc算法 - 找到弧的中点
【发布时间】:2014-11-15 22:36:22
【问题描述】:

在下图中,我需要找到从A到B的弧的中点M:

我想根据以下信息找到M:

  • A.X和A.Y,A的坐标
  • B.X 和 B.Y,B 的坐标
  • 半径,圆弧的半径
  • Center.X 和Center.Y,圆弧的中心

如何计算 M 的坐标?

【问题讨论】:

  • 这里没有问题。
  • 听起来是个有趣的问题。你在解决这个问题上走了多远?
  • 问题是我需要使用什么算法来找到圆弧中点的 X 和 Y?
  • 不,我没有中点的态度
  • 这不是数学而不是编程吗?

标签: c# algorithm geometry computational-geometry


【解决方案1】:

假设ABMCenter 是具有通常操作的某种向量类型的对象:

var a = A-C;
var b = B-C;
var m = a+b;

m 是一个从CenterM 的向量。因此:

m = m.Normalize() * Radius;
M = Center + m;

请注意:此算法不假定 A 和 B 的顺序,并且始终将弧解释为两个可能的弧中较小的一个。不加特殊情况,只能处理角度小于180°的圆弧。

处理订单:首先使用atan2计算从a到b的角度:

var angle = Math.Atan2(b.y, b.x) - Math.Atan2(a.y, a.x);
if (angle < 0)
{
    angle = 2*Math.PI + angle;
}

然后rotate a 是那个角度的一半:

angle /= 2;
var m = a.Rotate(angle);
M = Center + m;

【讨论】:

  • 没有测角电话的更好答案是stackoverflow.com/questions/4103405/…
  • @Goodies 圆心不是圆心。
  • @kagronic 当弧不是椭圆时,我们谈论的是同一个中点。我所指的提交是适用于任何圆形段的简单的三点中心计算。如果您认为这是无效的,请致电您的数学老师。
  • @Goodies 圆弧的中点在圆的边缘,圆的中心在圆的中间。它们是完全不同的东西。这个问题使用 3 个点,这使用 2 个点和半径。
  • @kagronick 你是对的我混淆了 M 和中心。但是当圆心(Xc,Zc)已知时,上面圆弧的中点M可以很容易地求出,M=(Xc,Zc+距离(C,A))。当弧线倾斜时,你可以连接A和B,找到中间和正交,归一化然后将向量乘以矢高找到M。无论如何,先计算C也有助于找到M。
猜你喜欢
  • 2018-06-13
  • 1970-01-01
  • 1970-01-01
  • 2012-02-20
  • 1970-01-01
  • 2018-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多