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





一般式的意思就是

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. python3.7 安装gensim使用word2Vec库

    应用的文章(个人试验过,完全正确):https://radimrehurek.com/gensim/index.html#install

  2. 洛谷 P1567 统计天数【最长上升子序列/断则归一】

    题目背景 统计天数 题目描述 炎热的夏日,KC非常的不爽.他宁可忍受北极的寒冷,也不愿忍受厦门的夏天.最近,他开始研究天气的变化.他希望用研究的结果预测未来的天气. 经历千辛万苦,他收集了连续N(1& ...

  3. freemarker自定义标签(与java合用)

    自定义类继承FreemarkerManager类,重写protected Configuration createConfiguration(ServletContext servletContext ...

  4. Python 经典正则表达式语法实例

  5. 打印begin~end

    要求: 输入:begin和end 输出:依次打印出begin到end import java.util.Scanner; //递归打印begin —— end public class demo1 { ...

  6. 【JZOJ4812】【NOIP2016提高A组五校联考2】string

    题目描述 给出一个长度为n, 由小写英文字母组成的字符串S, 求在所有由小写英文字母组成且长度为n 且恰好有k 位与S 不同的字符串中,给定字符串T 按照字典序排在第几位. 由于答案可能很大,模10^ ...

  7. 【itsdangerous】的加密解密原理(易懂版)

    from itsdangerous import TimedJSONWebSignatureSerializer import time from itsdangerous import Signat ...

  8. Directx11教程(20) 一个简单的水面

    原文:Directx11教程(20) 一个简单的水面 nnd,以前发的这篇教程怎么没有了?是我自己误删除了,还是被系统删除了? 找不到存稿了,没有心情再写一遍了.      简单说一下,本篇教程就是实 ...

  9. 笔记:html常见的兼容问题

    IE: IE的双边距bug: 块级元素float后设置横向的margin,IE6显示的margin比较大. 解决办法:display:inline 双边距bug:在IE6下,如果对元素设置浮动,同时又 ...

  10. 基于MaxCompute的数仓数据质量管理

    声明 本文中介绍的非功能性规范均为建议性规范,产品功能无强制,仅供指导. 参考文献 <大数据之路——阿里巴巴大数据实践>——阿里巴巴数据技术及产品部 著. 背景及目的 数据对一个企业来说已 ...