本文告诉大家获得两条一般式直线距离





一般式的意思就是

Ax+By+C=0" role="presentation">Ax+By+C=0Ax+By+C=0

如果有两个直线

A1x+B1y+C1=0A2x+B2y+C2=0" role="presentation">A1x+B1y+C1=0A2x+B2y+C2=0A1x+B1y+C1=0A2x+B2y+C2=0

如何判断两条直线的距离?

如果需要判断两条直线的距离,首先两条直线需要是平行

判断一般式直线平行的方法

A1B2−A2B1≈0" role="presentation">A1B2−A2B1≈0A1B2−A2B1≈0

如果两条直线符合上面公式,可以认为两条直线平行。

对于一般的两条直线,获得距离的公式

d=|C1−C2|A2+B2" role="presentation">d=|C1−C2|A2+B2−−−−−−−√d=|C1−C2|A2+B2

但是因为两个直线一般式的 AB 是不相等的,所以需要把两个直线转换相同的 AB

A1x+B1y+C1=0A2xA1A2+B2yA1A2+C2A1A2=0A1x+B1y+C2A1A2=0" role="presentation">A1x+B1y+C1=0A2xA1A2+B2yA1A2+C2A1A2=0A1x+B1y+C2A1A2=0A1x+B1y+C1=0A2xA1A2+B2yA1A2+C2A1A2=0A1x+B1y+C2A1A2=0

这时的距离公式是

d=|C1−C2A1A2|A12+B12" role="presentation">d=∣∣C1−C2A1A2∣∣A21+B21−−−−−−−√d=|C1−C2A1A2|A12+B12

但是存在 A 或 B 是 0 ,所以就不能直接使用上面的距离

如果a=0,b≠0" role="presentation">a=0,b≠0a=0,b≠0 那么需要修改直线公式

B1y+C1=0B1y+C2B1B2=0" role="presentation">B1y+C1=0B1y+C2B1B2=0B1y+C1=0B1y+C2B1B2=0

这时距离公式

d=|C1−C2B1B2|B1" role="presentation">d=∣∣C1−C2B1B2∣∣B1d=|C1−C2B1B2|B1

如果a≠0,b=0" role="presentation">a≠0,b=0a≠0,b=0 那么需要修改直线公式

A1x+C1=0A1x+C2A1A2=0" role="presentation">A1x+C1=0A1x+C2A1A2=0A1x+C1=0A1x+C2A1A2=0

这时距离公式

d=|C1−C2A1A2|A1" role="presentation">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?);
}

我搭建了自己的博客 https://lindexi.gitee.io/ 欢迎大家访问,里面有很多新的博客。只有在我看到博客写成熟之后才会放在csdn或博客园,但是一旦发布了就不再更新

如果在博客看到有任何不懂的,欢迎交流,我搭建了 dotnet 职业技术学院 欢迎大家加入


本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系

C# 判断两条直线距离的更多相关文章

  1. 2018-7-31-C#-判断两条直线距离

    title author date CreateTime categories C# 判断两条直线距离 lindexi 2018-07-31 14:38:13 +0800 2018-05-08 10: ...

  2. POJ1269:Intersecting Lines(判断两条直线的关系)

    题目:POJ1269 题意:给你两条直线的坐标,判断两条直线是否共线.平行.相交,若相交,求出交点. 思路:直线相交判断.如果相交求交点. 首先先判断是否共线,之后判断是否平行,如果都不是就直接求交点 ...

  3. 判断两条直线的位置关系 POJ 1269 Intersecting Lines

    两条直线可能有三种关系:1.共线     2.平行(不包括共线)    3.相交. 那给定两条直线怎么判断他们的位置关系呢.还是用到向量的叉积 例题:POJ 1269 题意:这道题是给定四个点p1, ...

  4. Intersecting Lines--POJ1269(判断两条直线的关系 && 求两条直线的交点)

    http://poj.org/problem?id=1269 我今天才知道原来标准的浮点输出用%.2f   并不是%.2lf  所以wa了好几次 题目大意:   就给你两个线段 然后求这两个线段所在的 ...

  5. POJ 1269 /// 判断两条直线的位置关系

    题目大意: t个测试用例 每次给出一对直线的两点 判断直线的相对关系 平行输出NODE 重合输出LINE 相交输出POINT和交点坐标 1.直线平行 两向量叉积为0 2.求两直线ab与cd交点 设直线 ...

  6. C# 判断两条直线是否相交

    直接上代码,过程不复杂 /// <summary> /// 判断两条线是否相交 /// </summary> /// <param name="a"& ...

  7. cocos2d-x 判断两条直线是否相交

    bool GraphicsUtil::linesCross(b2Vec2 v0, b2Vec2 v1, b2Vec2 t0, b2Vec2 t1, b2Vec2 &intersectionPo ...

  8. 求空间内两条直线的最近距离以及最近点的坐标(C++)

    关键词:空间几何 用途:总有地方会用到吧 文章类型:C++函数展示 @Author:VShawn(singlex@foxmail.com) @Date:2016-11-19 @Lab: CvLab20 ...

  9. 两条直线(蓝桥杯)二分枚举+RMQ

    算法提高 两条直线   时间限制:1.0s   内存限制:256.0MB        问题描述 给定平面上n个点. 求两条直线,这两条直线互相垂直,而且它们与x轴的夹角为45度,并且n个点中离这两条 ...

随机推荐

  1. CSS3渐变效果

    一.线性渐变linear-gradient  1.使用方法: background:-webkit-linear-gradient(red,blue);background:-moz-linear-g ...

  2. 论C#的多继承

    意外中看到这篇博客,很有意思! 本文转自:http://www.cnblogs.com/leotsai/p/csharp-multi-inheritance.html C#多继承的讨论似乎是个古老的问 ...

  3. 跟阿根一起学Java Web开发二:使用Ajax技术及XML与JSON实现输出

    如今B/S结构的系统使用Ajax技术是再平常只是的了.今天我们就来探讨下在JSPGenSDF第四版中:怎样使用Ajax技术.怎样输出XML文件及JSON格式数据输出. 怎样搭建一个最基础的JSPGen ...

  4. No.4 Verilog 表达式

    4-1 操作数 常数.参数.线网.变量.位选.存储器.数组. *部分位选: integer mark; :] inst; :] gpio; inst[mark+ : ] //选择 mark,mark+ ...

  5. Directx11教程(64) tessellation学习(6)-PN Triangles

    原文:Directx11教程(64) tessellation学习(6)-PN Triangles       前面我们用tessellation细分三角形或者四边形,产生的细分点都是在三角形或四边形 ...

  6. 【水滴石穿】AB-B-Clone

    地址: 源码 运行效果 无别的效果,代码如下 //index.js /** * @format * @lint-ignore-every XPLATJSCOPYRIGHT1 */ import {Ap ...

  7. Apache CarbonData1.3简介

    CarbonData是一种高性能大数据存储方案,支持快速过滤查找和即席OLAP分析,已在20+企业生产环境上部署应用,其中最大的单一集群数据规模达到几万亿.针对当前大数据领域分析场景需求各异而导致的存 ...

  8. String和Object转换

    http://www.cnblogs.com/mingzi/archive/2009/01/03/1367474.html

  9. hdu4178 乱搞

    #include<stdio.h> #include<string.h> #define maxn 100 char name[maxn]; ]; int main() { , ...

  10. 实用的cmd命令

    1.打开iis服务器:inetmgr 2.远程连接:mstsc 3.注册表:regedit.exe