求助,把一段java代码转换成.net代码或者js代码
publicclassPoint{doublex;doubley;}/***返回一个点是否在一个多边形区域内**@parammPoints多边形坐标点列表*@paramp...
public class Point {
double x;
double y;
}
/**
* 返回一个点是否在一个多边形区域内
*
* @param mPoints 多边形坐标点列表
* @param point 待判断点
* @return true 多边形包含这个点,false 多边形未包含这个点。
*/
public static boolean isPolygonContainsPoint(List<Point> mPoints, Point point) {
int nCross = 0;
for (int i = 0; i < mPoints.size(); i++) {
Point p1 = mPoints.get(i);
Point p2 = mPoints.get((i + 1) % mPoints.size());
// 取多边形任意一个边,做点point的水平延长线,求解与当前边的交点个数
// p1p2是水平线段,要么没有交点,要么有无限个交点
if (p1.y == p2.y)
continue;
// point 在p1p2 底部 --> 无交点
if (point.y < Math.min(p1.y, p2.y))
continue;
// point 在p1p2 顶部 --> 无交点
if (point.y >= Math.max(p1.y, p2.y))
continue;
// 求解 point点水平线与当前p1p2边的交点的 X 坐标
double x = (point.y - p1.y) * (p2.x - p1.x) / (p2.y - p1.y) + p1.x;
if (x > point.x) // 当x=point.x时,说明point在p1p2线段上
nCross++; // 只统计单边交点
}
// 单边交点为偶数,点在多边形之外 ---
return (nCross % 2 == 1);
} 展开
double x;
double y;
}
/**
* 返回一个点是否在一个多边形区域内
*
* @param mPoints 多边形坐标点列表
* @param point 待判断点
* @return true 多边形包含这个点,false 多边形未包含这个点。
*/
public static boolean isPolygonContainsPoint(List<Point> mPoints, Point point) {
int nCross = 0;
for (int i = 0; i < mPoints.size(); i++) {
Point p1 = mPoints.get(i);
Point p2 = mPoints.get((i + 1) % mPoints.size());
// 取多边形任意一个边,做点point的水平延长线,求解与当前边的交点个数
// p1p2是水平线段,要么没有交点,要么有无限个交点
if (p1.y == p2.y)
continue;
// point 在p1p2 底部 --> 无交点
if (point.y < Math.min(p1.y, p2.y))
continue;
// point 在p1p2 顶部 --> 无交点
if (point.y >= Math.max(p1.y, p2.y))
continue;
// 求解 point点水平线与当前p1p2边的交点的 X 坐标
double x = (point.y - p1.y) * (p2.x - p1.x) / (p2.y - p1.y) + p1.x;
if (x > point.x) // 当x=point.x时,说明point在p1p2线段上
nCross++; // 只统计单边交点
}
// 单边交点为偶数,点在多边形之外 ---
return (nCross % 2 == 1);
} 展开
1个回答
2017-05-08
展开全部
js
function isPolygonContainsPoint(mPoints, point) {
var nCross = 0;
for (var i = 0; i < mPoints.length; i++) {
var p1 = mPoints.get(i);
var p2 = mPoints.get((i + 1) % mPoints.length);
if (p1.y == p2.y)
continue;
if (point.y < Math.min(p1.y, p2.y))
continue;
if (point.y >= Math.max(p1.y, p2.y))
continue;
var x = (point.y - p1.y) * (p2.x - p1.x) / (p2.y - p1.y) + p1.x;
if (x > point.x)
nCross++;
}
return (nCross % 2 == 1);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |