【问题标题】:Obtaining the point at a certain percentage along a line segment获取沿线段一定百分比的点
【发布时间】:2022-05-17 01:58:40
【问题描述】:

我有一个方法可以返回由两点定义的线段的中点;

public static PointF GetMidPoint(PointF p1, PointF p2)
{
    return new PointF((p1.X + p2.X) / 2, (p1.Y + p2.Y) / 2);
}

效果完全符合预期。

但是,我现在需要在细分中找到一个任意百分比(例如,35%),原则上应该(?)很容易:

public static PointF GetArbitaryPoint(PointF p1, PointF p2, double percentage)
{
    return new PointF((p1.X + p2.X) / percentage, (p1.Y + p2.Y) / percentage);
}

但情况似乎并非如此,我认为这是一个 c# 问题——只要你引入一个小数点(无论是 Point 还是 PointF),它就会把它的玩具扔出婴儿车并返回奇怪的东西结果。

所以我想问题是我将如何修改上述内容以使其满足我的需要?

提前致谢。

【问题讨论】:

  • 试试 (P1.X*percentage + P2.X*(100 - percent))/100
  • 这是票,非常感谢。
  • @user1006221 这不正确。只需在几个示例值上尝试一下,您就会发现它不正确。
  • 我刚刚写了一个循环以 5% 的增量对其进行测试,它工作正常。
  • 这里很好地解释了线性插值的确切公式:math.stackexchange.com/a/1918779

标签: c# geometry line


【解决方案1】:

您使用了错误的公式。

两点之间的加权中间是p1 + (p2-p1) * percentage,恰好是0.5 p1 + (p2-p1)*0.5 = (p1 + p2) * 0.5

【讨论】:

  • (p1 + (p2 - p1)) * percentage 还是p1 + ((p2 - p1) * percentage)
  • 应该是第二个。从 p1 开始并添加一些百分比的差异。如果您添加了 100% 的差异,那么您将处于 p2。
【解决方案2】:

如果上面的答案不够清楚:

travel(from, to, percentDistance) =
    totalDistance = to - from
    from + (totalDistance * percentDistance)

【讨论】:

    猜你喜欢
    • 2015-10-16
    • 2019-09-22
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 2018-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多