Wpf 如何判断点是否是直线的一部分?

Wpf 如何判断点是否是直线的一部分?,wpf,math,geometry,Wpf,Math,Geometry,给定一条由两个点(a,B)定义的线,我如何判断另一个点(C)是否在该线上,WPF是否有一个内置函数作为Im使用路径来表示线,或者我必须编写一个函数。如果后者为真,我们将非常感谢您的帮助。如果三个点形成的角度为180度,则它们是共线的。或者用另一种方式表示,线段AB、AC和BC的斜率都相等 求解坡度:[AB].y/[AB].x=[AC].y/[AC].x提供了以下很好的函数: bool AreCollinear(Point A, Point B, Point C) { double sl

给定一条由两个点(a,B)定义的线,我如何判断另一个点(C)是否在该线上,WPF是否有一个内置函数作为Im使用路径来表示线,或者我必须编写一个函数。如果后者为真,我们将非常感谢您的帮助。

如果三个点形成的角度为180度,则它们是共线的。或者用另一种方式表示,线段AB、AC和BC的斜率都相等

求解坡度:
[AB].y/[AB].x=[AC].y/[AC].x
提供了以下很好的函数:

bool AreCollinear(Point A, Point B, Point C) 
{
    double slopesDelta = (A.y - B.y) * (A.x - C.x) - (A.y - C.y) * (A.x - B.x);
    double tolerance = 1e-6;                // substitute for your own tolerance
    return tolerance > Math.Abs(slopesDelta);
}

@StewartStoakes当然你不会做一个精确的比较,因为由于舍入误差,这或多或少会失败。例如,您可以检查左手项和右手项之差的绝对值是否小于某个小值,而不是比较
a==b
Math.Abs(a-b)<1e-6
@Clemens-\u绝对有效点;)我已经更新了代码来反映这一点!请从中的备注部分了解以下内容:“如果您创建一个自定义算法来确定两个浮点数是否可以视为相等,我们建议您不要将算法基于ε常量的值来确定两个相等值的可接受绝对差值。(通常,该差值比Epsilon大很多倍。)”继续:“有关比较两个双精度浮点值的信息,请参阅和。“好的,我理解ε和双重问题。我在C++中遇到过浮动,这让我头疼。我使用下面的函数从C++移植,但是它使用浮点而不是双倍。请你告诉我,如果你认为这个代码将工作正常。带容差的公共静态布尔等式(双a,双b){返回((b-ε