zoukankan      html  css  js  c++  java
  • C# 判断两条直线距离

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



    一般式的意思就是

    Ax+By+C=0

    如果有两个直线

    A1x+B1y+C1=0A2x+B2y+C2=0

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

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

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

    A1B2A2B10

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

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

    d=|C1C2|A2+B2

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

    A1x+B1y+C1=0A2xA1A2+B2yA1A2+C2A1A2=0A1x+B1y+C2A1A2=0

    这时的距离公式是

    d=|C1C2A1A2|A12+B12

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

    如果a=0,b0 那么需要修改直线公式

    B1y+C1=0B1y+C2B1B2=0

    这时距离公式

    d=|C1C2B1B2|B1

    如果a0,b=0 那么需要修改直线公式

    A1x+C1=0A1x+C2A1A2=0

    这时距离公式

    d=|C1C2A1A2|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 ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系

  • 相关阅读:
    关于django模型里面的__str__和__unicode__
    js基础之javascript的存在形式和js代码块在页面中的存放位置和 CSS 对比
    css样式之边框和内外边距
    css样式之背景图片
    python学习笔记(2)--python3新特性
    linux命令每日一练习-rmdir mv
    代码规范
    抽象类和接口的区别
    单例模式及其并发问题
    使用url下载网络图片以及流介绍
  • 原文地址:https://www.cnblogs.com/lindexi/p/12087168.html
Copyright © 2011-2022 走看看