gpt4 book ai didi

c# - 计算点到直线的距离

转载 作者:行者123 更新时间:2023-12-02 17:02:53 27 4
gpt4 key购买 nike

我正在用 C# 开发一个类似绘画的程序。我希望能够在单击靠近它时删除它(例如距离 < 10 像素)。我尝试了不同的计算,但我不断遇到的问题是,只有当我在线的起点或终点附近单击时,线才会被删除。介于两者之间的任何东西似乎都行不通。

令 p 为用户在表单中单击的点,startp 和 endp 为线的终点。

double a = (endp.Y - startp.Y) / (endp.X - startp.X); // gradient
double b = endp.Y - a * endp.X; // y intercept

// condition such that it only works when i click close to the line segment,
// not the entire infinite line for which the calculation y=ax+b works

double yvalue = p.X * a + b; // value the line segment has at the x-value which the user clicks on
double alpha = Math.Atan((endp.X - startp.X) / (endp.Y - startp.Y));
double distance = Math.Sin(alpha) * Math.Abs((yvalue - p.Y));
if (distance<10)
// remove line

为什么这段代码只适用于靠近起点或终点的点?我相信这不是因为我在此处的示例中遗漏了我使用的条件

最佳答案

你要计算的距离可以看做三角形P-startP-endP中P的高度。因此,这给出了以下公式:

a = dist(startp, endp)
b = dist(startp, p)
c = dist(endp, p)
s = (a + b + c)/2
distance = 2 * sqrt(s(s-a)(s-b)(s-c)) / a

比照。 Altitude (triangle)

关于c# - 计算点到直线的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53173712/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com