zoukankan      html  css  js  c++  java
  • [程序员代码面试指南]9-判断点在三角形内

    判断点在三角形内

    四种方法:
    1 面积法(由于精度的损失不太方便使用)
    2 当点逆时针,分别判断点是否满足在三个向量的左侧
    3 对每条边的向量,判断点和三角形剩下的顶点在该向量的同一侧
    4 重心法(速度快)

    相关知识

    两个向量的叉积

    向量积可以被定义为:
    模长:|c|=|a×b|=|a||b|sinθ ,(在这里θ表示两向量之间的夹角(共起点的前提下)(0°≤θ≤180°),它位于这两个矢量所定义的平面上。)
    方向:a向量与b向量的向量积的方向与这两个向量所在平面垂直,且遵守右手定则。
    几何意义:叉积的长度|a×b|可以解释成这两个叉乘向量a,b共起点时,所构成平行四边形的面积。

    三个向量的混合积

    几何意义:混合积[abc]=(a×b)·c可以得到以a,b,c为棱的平行六面体的体积。
    混合积正负的几何意义:混合积 (a,b,c) 的符号是正还是负取决于 ∠ (a×b , c ) 是锐角还是钝角,即 a×b 与 c 是指向 a , b 所在平面的同侧还是异侧

    方法二代码

    public class Main {
    	public static boolean isInside(double x1,double y1,double x2,double y2,double x3,double y3,double x,double y) {
            if(crossProduct(x3-x1,y3-y1,x2-x1,y2-y1)>=0){
                double temp=x2;
                x2=x3;
                x3=temp;
                
                temp=y2;
                y2=y3;
                y3=temp;     
    
            }
            if(crossProduct(x2-x1,y2-y1,x-x1,y-y1)<0) {
            	return false;
            }
            if(crossProduct(x3-x2,y3-y2,x-x2,y-y2)<0) {
            	return false;
            }
            if(crossProduct(x1-x3,y1-y3,x-x3,y-y3)<0) {
            	return false;
            }
            return true;
        }
    	
    	public static double crossProduct(double x1,double x2,double y1,double y2) {
    		return x1*y2-x2*y1;
    	}
    }
    
  • 相关阅读:
    生产者消费者模式
    Linux提权(capabilities)
    协程
    xpath常用
    iframe 练习
    python 实现数据库中数据添加、查询与更新
    web网站压力/性能测试经验分享
    AttributeError: module 'applescript' has no attribute 'app'解决方案
    pip3: error: can't exec '/usr/local/bin/pip3' (errno=No such file or directory)报错解决方案
    看了这篇双十一抢购攻略?喜欢的东西还能抢不到?
  • 原文地址:https://www.cnblogs.com/coding-gaga/p/10969268.html
Copyright © 2011-2022 走看看