2018-7-31-C#-判断两条直线距离
title | author | date | CreateTime | categories |
---|---|---|---|---|
C# 判断两条直线距离 |
lindexi |
2018-07-31 14:38:13 +0800 |
2018-05-08 10:32:50 +0800 |
数学 C# 几何 |
本文告诉大家获得两条一般式直线距离。
一般式的意思就是
Ax+By+C=0Ax+By+C=0
如果有两个直线
A1x+B1y+C1=0 A2x+B2y+C2=0A1x+B1y+C1=0 A2x+B2y+C2=0
如何判断两条直线的距离?
如果需要判断两条直线的距离,首先两条直线需要是平行
判断一般式直线平行的方法
A1B2−A2B1≈0A1B2−A2B1≈0
如果两条直线符合上面公式,可以认为两条直线平行。
对于一般的两条直线,获得距离的公式
d=|C1−C2|√A2+B2d=|C1−C2|√A2+B2
但是因为两个直线一般式的 AB 是不相等的,所以需要把两个直线转换相同的 AB
A1x+B1y+C1=0 A2xA1A2+B2yA1A2+C2A1A2=0 A1x+B1y+C2A1A2=0A1x+B1y+C1=0 A2xA1A2+B2yA1A2+C2A1A2=0 A1x+B1y+C2A1A2=0
这时的距离公式是
d=|C1−C2A1A2|√A21+B21d=∣∣C1−C2A1A2∣∣√A21+B21
但是存在 A 或 B 是 0 ,所以就不能直接使用上面的距离
如果a=0,b≠0a=0,b≠0 那么需要修改直线公式
B1y+C1=0 B1y+C2B1B2=0B1y+C1=0 B1y+C2B1B2=0
这时距离公式
d=|C1−C2B1B2|B1d=∣∣C1−C2B1B2∣∣B1
如果a≠0,b=0a≠0,b=0 那么需要修改直线公式
A1x+C1=0 A1x+C2A1A2=0A1x+C1=0 A1x+C2A1A2=0
这时距离公式
d=|C1−C2A1A2|A1d=∣∣C1−C2A1A2∣∣A1
因为我是在编程,我可以拿到距离平方,这样可以减少开方,我把上面的公式写为代码,代码是C#不过大家可以把他使用其他语言
/// <summary>
/// 获得两条直线的距离,传入的直线已经是判断平行
/// </summary>
/// <param name="otherLine"></param>
/// <returns></returns>
public double? GetDistanceWithLineSquare(LineEquation otherLine)
{
var aIsZero = A.IsZero();
var bIsZero = B.IsZero();
//D=|C1-C2|/sqrt(A^2+B^2)
// A 是 0 ,但是 B 不是 0
if (aIsZero && !bIsZero)
{
//B1Y+C1=0 B1Y+B1/B2*C2=0
return Math.Abs(C - B / otherLine.B * otherLine.C) / B*B;
}
if (!aIsZero && bIsZero)
{
//A1X+C1=0 A1X+A1/A2*C2=0
return Math.Abs(C - A / otherLine.A * otherLine.C) / A*A;
}
if (!aIsZero && !bIsZero)
{
return Math.Abs(C - A / otherLine.A * otherLine.C) / (A * A + B * B);
}
if (aIsZero && bIsZero)
{
return default(double?);
}
return default(double?);
}
上面代码的 A.IsZero()
就是判断 A 是不是为 0 ,在 C# 很难判断 double 是不是为 0 所以需要这个方法
博客园博客只做备份,博客发布就不再更新,如果想看最新博客,请访问 https://blog.lindexi.com/
如图片看不见,请在浏览器开启不安全http内容兼容

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名[林德熙](https://www.cnblogs.com/lindexi)(包含链接:https://www.cnblogs.com/lindexi ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我[联系](mailto:lindexi_gd@163.com)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)