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





一般式的意思就是

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. 使用Centos7 安装docker的步骤

    1.Linuxyum源切换阿里云软件源 备份本机软件源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.b ...

  2. JS函数式编程 - 概念

    最近在看Typescript,顺便看了一些函数式编程,然后半个国庆假期就没有了.做个笔记,分几个部分写吧. 最开始接触函数式编程的时候,第一个接触的概念就是高阶函数,和柯里化.咋一看,这不就是长期用来 ...

  3. 使用淘宝镜像cnpm安装Vue.js

    简介: Vue.js是前端一个比较火的MVVM框架, 是一套构建用户界面的渐进式框架. Vue 只关注视图层, 采用自底向上增量开发的设计. Vue 的目标是通过尽可能简单的 API 实现响应的数据绑 ...

  4. yum源配置及详解

      红帽系列中,进行软件安装可以有三种方法,编译安装,rpm包安装,和yum源安装.其中yum方法安装最简单,因为它可以自动解决软件包之间的依赖关系... 一.常用yum源 yum源可以来源于多种文件 ...

  5. 【JZOJ4755】【NOIP2016提高A组模拟9.4】快速荷叶叶变换

    题目描述 输入 一行,包含两个整数N,M. 输出 1个整数,FHT(N,M) mod 1000000007的值. 样例输入 3 4 样例输出 1 数据范围 对于 40% 的数据,1 ≤ N,M ≤ 1 ...

  6. Net Transport

    在调用第三方请求时,正确使用Client也不是一件非常容易的事. 下面是截取的一段描述,建议Client或Transport在整个服务期间最好是全局单例的,Transport本身会维护连接的状态,而且 ...

  7. 面向视频的全新AI架构 —— 阿里云智能视觉技术全解

    我们都知道,AI技术正在以可见的速度被应用于各行各业,然而绝大部分业务场景想应用AI技术,都需要算法工程师根据自身业务的标注数据,来进行单独训练,才能打磨出合适的AI模型.如此一来,如何以最低的门槛和 ...

  8. win2003开启telnet

    1.在服务器上,cmd中输入命令services.msc打开服务窗口,找到telnet服务,先开启它的依赖服务Remote Procedure Call,在开启telnet服务. 2.本地电脑中cmd ...

  9. DirectX11 With Windows SDK--07 添加光照与常用几何模型、光栅化状态

    原文:DirectX11 With Windows SDK--07 添加光照与常用几何模型.光栅化状态 前言 对于3D游戏来说,合理的光照可以让游戏显得更加真实.接下来会介绍光照的各种分量,以及常见的 ...

  10. iOS 三种打电话方式

    //1,这种方法,拨打完电话回不到原来的应用,会停留在通讯录里,而且是直接拨打,不弹出提示 NSMutableString * str=[[NSMutableString alloc] initWit ...