package {
import flash.geom.Point;
public final class Util{
public static function vectorAdd(p1:Point,p2:Point):Point{
return new Point(p1.x+p2.x,p1.y+p2.y);
}
public static function vectorSub(p1:Point,p2:Point):Point{
return new Point(p1.x-p2.x,p1.y-p2.y);
}
public static function vectorCrossProduct(p1:Point,p2:Point):Number{
return p1.x*p2.y-p2.x*p1.y;
}
public static function inTwoPointRectangle(p0:Point,p1:Point,p2:Point):Boolean{
if(Math.min(p1.x,p2.x)<=p0.x&&
Math.max(p1.x,p2.x)>=p0.x&&
Math.min(p1.y,p2.y)<=p0.y&&
Math.max(p1.y,p2.y)>=p0.y){
return true;
}else{
return false;
}
}
public static function foldLine(p0:Point,p1:Point,p2:Point):Number{
//(p2-p0)x(p1-p0)
return Util.vectorCrossProduct(Util.vectorSub(p2,p0),Util.vectorSub(p1,p0));
}
/*
(p0-p1)X(p2-p1) 判断点在线段上
*/
public static function pointInLine(p0:Point,p1:Point,p2:Point):Boolean{
if(Util.vectorCrossProduct(Util.vectorSub(p0,p1),Util.vectorSub(p2,p1))==0&&
Util.inTwoPointRectangle(p0,p1,p2)){
return true;
}else{
return false;
}
}
//判断两线段相交
public static function twoLineIntersects(p1:Point,p2:Point,p3:Point,p4:Point):Boolean{
var s:Number=((p1.y-p3.y)*(p4.x-p3.x)-(p1.x-p3.x)*(p4.y-p3.y))/((p2.x-p1.x)*(p4.y-p3.y)-(p2.y-p1.y)*(p4.x-p3.x));
var r:Number=((p1.y-p3.y)*(p2.x-p1.x)-(p1.x-p3.x)*(p2.y-p1.y))/((p2.x-p1.x)*(p4.y-p3.y)-(p2.y-p1.y)*(p4.x-p3.x));
if(r>=0&&r<=1&&s>=0&&s<=1){
return true;
}else{
return false;
}
}
public static function pointInPolygn(p:Point,polygonArr:Array):Boolean{
var p1:Point=new Point(1000000,p.y);
}
}
}
gis
最新推荐文章于 2024-07-20 23:16:29 发布