博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【原创】已知四个坐标点求其两条直线交点坐标
阅读量:5969 次
发布时间:2019-06-19

本文共 2143 字,大约阅读时间需要 7 分钟。

//判断第一个点 与 第四个点所连直线 与 第2个点和第3个点 所连直线的交点 是否在 第2个和第3个点的线段上function getCrossPoint(point1, point2, point3, point4){    var pD_x = point1.split(',')[0];    var pD_y = point1.split(',')[1];    var pA_x = point2.split(',')[0];    var pA_y = point2.split(',')[1];    var pC_x = point3.split(',')[0];    var pC_y = point3.split(',')[1];    var pB_x = point4.split(',')[0];    var pB_y = point4.split(',')[1];     var k_y = (pB_x * pC_y * pD_y - pD_x * pB_y * pC_y - pA_y * pB_x * pD_y + pD_x * pB_y * pA_y + pC_x * pA_y * pD_y - pA_x * pC_y * pD_y - pC_x * pB_y * pA_y + pA_x * pB_y * pC_y) /        (pD_y * pC_x - pA_x * pD_y - pB_y * pC_x + pA_x * pB_y + pB_x * pC_y - pD_x * pC_y - pA_y * pB_x + pA_y * pD_x);    var k_x = (pD_y * (pC_x - pA_x) * (pB_x - pD_x) - pA_y * (pC_x - pA_x) * (pB_x - pD_x) + pA_x * (pC_y - pA_y) * (pB_x - pD_x) + pD_x * (pD_y - pB_y) * (pC_x - pA_x)) /        ((pC_y - pA_y) * (pB_x - pD_x) + (pD_y - pB_y) * (pC_x - pA_x));    return k_x + ',' + k_y;}

 

//判断 随机产生的点 和点X 的连线  与地图上已知的两点(给出的坐标中连续的两点)之间的连线  的 交点 是否在 已知的两点的线段之上  如果在之上:那么点X的顺序应该调整到已知的两点中间function CrosspointIsOnTheLine(point1, point2, point3, point4){    var crossPoint = getCrossPoint(point1, point2, point3, point4);//交点坐标    var result = {        online: false,//是否在线段上        nearP2: undefined//如果不在线段上,是否近p2,否则近p3    };    //交点分别到 第2点 和 第3点 之间的距离 等于 第2点到第3点的距离  那么 交点在线段上    var cp_xy = crossPoint.split(',');    var p2_xy = point2.split(',');    var p3_xy = point3.split(',');    var cp_p2_length = getLength(cp_xy[0], cp_xy[1], p2_xy[0], p2_xy[1]);//交点到p2的距离    var cp_p3_length = getLength(cp_xy[0], cp_xy[1], p3_xy[0], p3_xy[1]);//交点到p3的距离    var p2_p3_length = getLength(p2_xy[0], p2_xy[1], p3_xy[0], p3_xy[1]);//p2到p3的距离    //由于线段的长度本身存在精度的问题  ,所以这么比较 交点到 p2和p3的距离 同时小于 p2到p3的距离 说明 交点在 p2到p3的线段上    if (cp_p2_length <= p2_p3_length && cp_p3_length <= p2_p3_length) {        result.online = true;     }    else {        //if (cp_p2_length > p2_p3_length) {
// result.nearP2 = false; //} //else if (cp_p3_length > p2_p3_length) {
// result.nearP2 = true; //} } return result;}

 getLength()函数见下一篇

转载地址:http://dywox.baihongyu.com/

你可能感兴趣的文章
【Java集合源码剖析】TreeMap源码剖析
查看>>
读取oracle注释
查看>>
二叉树
查看>>
Laravel 5.1 artisan 的使用
查看>>
Maven 学习之旅
查看>>
C Primer Plus 第5章 运算符、表达式和语句 编程练习及答案
查看>>
Python点滴
查看>>
WINDOWS 几种坐标系
查看>>
大豆和黄豆芽还能吃吗?
查看>>
Yii2中如何将Jquery放在head中的方法
查看>>
解析solidity的event log
查看>>
[转发] 【GRT安智网】HTC安致手机ROM国内首个中文定制教程goapk首发[最新厨房V0......
查看>>
try catch 之后是否会继续执行
查看>>
vim 配置svn
查看>>
《重构-改善既有代码设计》读书笔记-重构篇
查看>>
测试第三方代码
查看>>
RabbitMQ接触(二)
查看>>
Springboot-添加对jsp支持
查看>>
数据库设计中的14个技巧
查看>>
替换k个字符后最长重复子串
查看>>