zoukankan      html  css  js  c++  java
  • 判断点在直线的一侧?判断点在矩形、三角形、多边形内?

    点(x0,y0)到直线Ax+By+C=0的距离公式:

    |Ax0+By0+C|/(A^2+B^2)^0.5
    夹角
    cos<a|,b|>=(a|.*b|)/(|a||*|b||)=(a1b1+a2b2+a3b3)/((a1^2+a2^2+a3^2)^0.5*(b1^2+b2^2+b3^2)^0.5)

    判断点在直线的一侧

    方法1:

    http://zhidao.baidu.com/question/47341112.html

    已知P(0,0),Q(3,2)两点,试判断P,Q是否在直线2x+3y=4的同一侧。

    解:直线2x+3y=4
    即直线2x+3y-4=0
    把P、Q代入2x+3y-4得到
    2*0+3*0-4=-4<0
    2*3+3*2-4=8 
    所以在两侧!

    判断点是否在直线段上?

    点到2个端点的距离和=?线段的长度+误差

    方法2:

    http://www.cnblogs.com/carekee/articles/1877575.html

    怎么判断坐标为(xp,yp)的点P是在直线的哪一侧呢?

    设直线是由其上两点(x1,y1),(x2,y2)确定的,直线方向是由(x1,y1)到(x2,y2)的方向。

    假设直线方程为:Ax+By+C=0,则有:

        A=y2-y1;   B=x1-x2;   C=x2*y1-x1*y2;

    这时可以通过计算D,来判断点P是在直线的哪一侧:
        D=A*xp+B*yp+C

    若D<0,则点P在直线的左侧;若D>0,则点P在直线的右侧;若D=0,则点P在直线上。

    注:这里的直线是有方向性的!

    方法3:利用矢量计算快速判定一点在直线的哪一侧

    http://www.cnblogs.com/vilyLei/articles/1567852.html

    例如矢量A×矢量B=矢量C
    设想矢量A沿小于180度的角度转向矢量B
    将右手的四指指向矢量A的方向,右手的四指弯曲代表上述旋转方向,则伸直的拇指指向它们的叉乘得到的矢量C
    如果矢量C的方向相同,则在同侧;否则在两侧。

    注:叉乘计算公式!

    http://hi.baidu.com/foreshore/blog/item/693bce3d9b8cf2c19f3d6218.html

    若将向量用坐标表示(三维向量),向量a=(x1,y1,z1),向量b=(x2,y2,z2),则:

    点乘,也叫向量的内积、数量积。

        向量a·向量b = |a||b|cos<a,b>;          向量a·向量b  = x1x2 + y1y2 + z1z2

    叉乘,也叫向量的外积、向量积。

        |向量c| = |向量a×向量b| = |a||b|sin<a,b>

    向量c的方向与a,b所在的平面垂直,且方向要用“右手法则”判断         
    (用右手的四指先表示向量a的方向,然后手指朝着手心的方向<180摆动到向量b的方向,大拇指所指的方向就是向量c的方向);

        向量a×向量b =  | i   j   k | 
                
    |x1 y1 z1|
                |x2 y2 z2|       
               = (y1z2-y2z1, x2z1-x1z2, x1y2-x2y1)

        (i、j、k分别为空间中相互垂直的三条坐标轴的单位向量)

    向量的外积不遵守乘法交换率

        向量a×向量b = -向量b×向量a

    判断点是否在矩形、多边形中

    http://blog.csdn.net/qiulei563/article/details/4869692

    http://mniwjb.blog.sohu.com/58905924.html

    http://dev.gameres.com/Program/Abstract/Geometry.htm

    方法1:

    只要判断该点的横坐标和纵坐标是否夹在矩形的左右边和上下边之间。

    例如:矩形四个顶点P1,P2,P3,P4,判断P是否包含在矩形中,

    只需要判断:|P2P|×|P2P1|*|P3P|×|P3P4|<=0 and |P1P|×|P1P4|*|P2P|×|P2P3|<=0

    方法2:采用点是否包含在多边形中判断

    以该点为顶点,做一条射线,使得矩形四个顶点中任意一点都不在射线上。 

    若该射线与矩形有且仅有一个交点,则在矩形内;若有零个或两个焦点,则在矩形外。

    至于射线,可以通过选择肯定在矩形外的一点和已知点练成线段来构成。

    只要点坐标不在矩形的left~right,bottom~top范围内即可。

  • 相关阅读:
    mysql 1449 : The user specified as a definer ('root'@'%') does not exist 解决方法
    java中使用正则表达式
    Timer与ScheduledThreadPoolExecutor的比较
    Java同步块
    java中的浅拷贝与深拷贝
    java的关闭钩子(Shutdown Hook)
    JVM系列三:JVM参数设置、分析
    java虚拟机参数设置
    UTF-8编码规则(转)
    过滤3个字节以上的utf-8字符
  • 原文地址:https://www.cnblogs.com/xfzhang/p/2447820.html
Copyright © 2011-2022 走看看