美文网首页程序员
判断点在线段上的投影点是否在线段内

判断点在线段上的投影点是否在线段内

作者: 钱江无潮 | 来源:发表于2020-03-24 17:17 被阅读0次

应用场景

多段线上找到能被投影的线段

已知条件:

线段两端点坐标:P1[x1, y1]、P2[x2, y2]
目标点:P[x0,y0]

QQ截图20200324164722.png

思路

  1. 直接求出投影点,然后判断投影点是否在P1P2之间
  2. 求向量P1P2和P1P、P2P1和P2P的夹角。若有一个为钝角,则在线段外面


    QQ截图20200324165727.png
QQ截图20200324170007.png

代码

function isPointInsideSegment(x0, y0, x1, y1, x2, y2) {
  // 求Cos∠PP1P2
  let dx10, dy10, m10, dx12, dy12, m12;
  dx10 = x0 - x1;
  dy10 = y0 - y1;
  m10 = Math.hypot(dx10, dy10);
  dx12 = x2 - x1;
  dy12 = y2 - y1;
  m12 = Math.hypot(dx12, dy12);
  if ((dx10 * dx12 + dy10 * dy12) / m10 / m12 < 0) return false;

  // 求Cos∠PP2P1
  let dx20, dy20, m20, dx21, dy21, m21;
  dx20 = x0 - x2;
  dy20 = y0 - y2;
  m20 = Math.hypot(dx20, dy20);
  dx21 = x1 - x2;
  dy21 = y1 - y2;
  m21 = Math.hypot(dx21, dy21);
  return (dx20 * dx21 + dy20 * dy21) / m20 / m21 >= 0;
}

相关文章

  • 点到线段的距离

    点到直线公式计算的是点和直线之间的关系,而不是点和线段之间的关系需要额外的判断,点在线段上的投影点是否位于线段内部...

  • 判断点在线段上的投影点是否在线段内

    应用场景 多段线上找到能被投影的线段 已知条件: 线段两端点坐标:P1[x1, y1]、P2[x2, y2]目标点...

  • 1 几何学中用到的一些方法

    1.点到直线的距离 2.获取点在直线上的垂直投影点 3.获取两直线交点 4.获取线段与直线的交点 5.点是否在线段...

  • 计算几何基础

    判断点是否在线段上、判断两条线段是否相交 这里采用向量的解法。有2个概念:向量的内积和外积。内积又称为点积dot ...

  • Cocos Creator游戏开发中如何判断几何形状的位置关系

    在Cocos Creator游戏开发过程中,经常需要判断几何形状的位置关系,例如:线段与线段是否相交、线段与多边形...

  • 二分法求不规则闭合路径与线段的交点

    本文中约定 : 路径 : 不规则闭合路径 线段 : 一个端点在路径内,另外一端点在路径外的线段 交点 : 路径和线...

  • Bezier曲线

    同一级控制线段上的同进度点连成的线段组成下一级控制线段直到只剩一条线段 此时这条线段上的进度点组成的线段为 bez...

  • 你以为的不一定是对的

    1. 如果问你两条长度不同的线段,哪条线段上的点多?你会怎样回答? 你可能觉得肯定是哪条线段长,哪天线段上的点就多...

  • 三角之目:2013年福建卷题21

    2013年福建卷题21 在等腰直角 中,,点 在线段 上. (1)若 ,求 的长. (2)若点 在线段 ...

  • CCF 碰撞的小球

    问题描述 数轴上有一条长度为L(L为偶数)的线段,左端点在原点,右端点在坐标L处。有n个不计体积的小球在线段上,开...

网友评论

    本文标题:判断点在线段上的投影点是否在线段内

    本文链接:https://www.haomeiwen.com/subject/jjtayhtx.html