【Java 计算坐标点距离,平行线交点算法详解】在平面直角坐标系中,直线的Y轴截距是相等的 。也就是说不管是在直线的哪个点,代入到上面的公式中来得到的b值都是固定的 。
publicPoint getCross1(Point pointA, Point pointB, Point pointC, Point pointD) {Point point =new Point();/**前面直角的方法省略了 主要是判断斜线的交点*/int k1 = (pointB.y - pointA.y) / (pointB.x - pointA.x); //得到线段1的 斜率K的值int b1 = pointA.y - pointA.x * k1; //得到线段1的 Y截距 b的值int k2 = (pointD.y - pointC.y) / (pointD.x - pointC.x); // 得到线段2的斜率K的值//斜截式公式:y=kx+b ,进行简单转换一下就是:b= y-kxint b2 = pointC.y - pointC.x * k2; //得到线段2的 Y截距b的值 。在这里我们可以使用pointC的值,也可以使用pointD的值}
然后,由于交点需要满足线段1的斜截式,也需要满足线段2的斜截式公式,所以我们可以得到:
point.y = k1 * point.x + b1; // y=kx+bpoint.y = k2 * point.x + b2; // y=kx+b//根据上面的公式转换 。k1 * point.x + b1 = k2 * point.x + b2;//这样整个表达式中就只有point.x 这一个变量了 。//根据数学表达式的规则,移动等号两边的数据 。将未知数移动到左边k1 * point.x - k2 * point.x = b2 - b1;// 移动过程中要注意加减法//然后再提取乘法(k1 - k2) * point.x = b2 - b1;//再进行表达式变换point.x = (b2 - b1)/(k1 - k2); //也就是最终的结果值了
当我们知道x值之后 。代入斜截式中可以快速得到y值:
point.y = k1 * point.x + b1;
完整版本效果就是:
publicPoint getCross1(Point pointA, Point pointB, Point pointC, Point pointD) {Point point =new Point();/**前面直角的方法省略了 主要是判断斜线的交点*/int k1 = (pointB.y - pointA.y) / (pointB.x - pointA.x); //得到线段1的 斜率K的值int b1 = pointA.y - pointA.x * k1; //得到线段1的 Y截距 b的值int k2 = (pointD.y - pointC.y) / (pointD.x - pointC.x); // 得到线段2的斜率K的值//斜截式公式:y=kx+b ,进行简单转换一下就是:b= y-kxint b2 = pointC.y - pointC.x * k2; //得到线段2的 Y截距b的值 。在这里我们可以使用pointC的值,也可以使用pointD的值point.x = (b2 - b1)/(k1 - k2);point.y = k1 * point.x + b1; }
有些公式可能写的结果是这样的:
//情况1point.x = (b2 - b1)/(k1 - k2); //情况2point.x = (b1 - b2)/(k2 - k1);
这两个情况下,是等效的 。在上面介绍了情况1的表达式是如何推导的 。现在介绍一下如何推导出情况2:
point.y = k1 * point.x + b1; // y=kx+bpoint.y = k2 * point.x + b2; // y=kx+b//根据上面的公式转换 。k1 * point.x + b1 = k2 * point.x + b2;//这样整个表达式中就只有point.x 这一个变量了 。//将未知数移动到右侧b1-b2 = k2*point.x-k1*point.x;// 移动过程中要注意加减法//然后再提取乘法b1-b2 = (k2-k1)*point.x;//再进行表达式变换point.x = (b1 - b2)/(k2 - k1); //也就是最终的结果值了
所以,这种表达式结果是一致的 。
PS:在上面的代码中,我的变量是int型的 。那是因为我自定义的类型参数 。你如果是double也是没有关系的 。单位格式不影响计算逻辑 。只是最终结果值的精度有差异而已 。
3. 小结到这里,详细介绍了平面坐标系下的距离判断 。线段平行和线段交点的计算 。关于斜率的计算,稍微涉及了高中的知识 。但是整体的计算过程也就初中水平了 。
只是由于很长时间没有接触了 。一些概念和公式都忘记完了 。
所以,才会按照完全不懂的情况下 。充分介绍一下这中间的运算过程 。
后面可能会更新,如何计算角度 。根据坐标点,计算运动方向等等吧 。
推荐阅读
- 两千字详解Java 8 中必知的4个函数式接口
- 一直搞不懂Java线程通信,这次终于明白了
- 张继科|张继科丑闻上升到刑事案件,爆料者笃定景甜被侵害,债主已经坐牢!
- 乐基儿|乐基儿坐私人飞机旅游散心,近照暴瘦一圈,晒奢华美食享受独处
- 怎么去泸沽湖最方便--去泸沽湖坐飞机到哪里
- 什么是渗透系数,怎么解释?是什么意思 渗透系数计算公式
- 秦岚|《灿烂的转身》今晚首播,秦岚领衔,7位实力派坐镇,有爆款潜质
- 坐月子天天小米粥好吗
- 张学友|香港贵妇大聚会,45岁伏明霞低调坐边角,C位背景太强悍了
- 张继科|张继科丑闻上升到刑事案件,爆料者笃定景甜被侵害,债主已经坐牢