我有一个System.Windows.Shapes.Polygon对象,其布局完全由一系列点确定.我需要确定这个Polygon是否是自相交的; 即,如果多边形的任何边与不是顶点的点处的任何其他边相交.有一种简单/快速的方法来计算它吗?
我想在折线周围绘制一个多边形.在我的情况下,折线是Google地图方向,我需要在Google地图画布中围绕它展示多边形.
第一:
对于抵消,我使用JavaScript Clipper Library.我有以下折线(路线):我使用Clipper在下面创建一个偏移多边形:
我有一个有效的JS Bin示例.
代码是:
<html>
<head>
<title>Javascript Clipper Library / Offset polyline</title>
<script src="clipper.js"></script>
<script>
function draw() {
var polygons = [[{"X":72,"Y":59.45},{"X":136,"Y":66},{"X":170,"Y":99},{"X":171,"Y":114},{"X":183,"Y":125},{"X":218,"Y":144},{"X":218,"Y":165},{"X":226,"Y":193},{"X":254,"Y":195},{"X":283,"Y":195},{"X":292,"Y":202},{"X":325,"Y":213},{"X":341,"Y":234},{"X":397,"Y":245},{"X":417,"Y":248}]];
var scale = 100;
reverse_copy(polygons);
polygons = scaleup(polygons, scale);
var cpr = new ClipperLib.Clipper();
var delta = 25;
var joinType = ClipperLib.JoinType.jtRound;
var miterLimit = 2;
var AutoFix = true;
var svg, offsetted_polygon,
cont = document.getElementById('svgcontainer');
offsetted_polygon = cpr.OffsetPolygons(polygons, delta * scale, joinType, miterLimit, AutoFix);
//console.log(JSON.stringify(offsetted_polygon));
// Draw red offset polygon
svg …Run Code Online (Sandbox Code Playgroud) 我正在使用Google Maps Drawing Manager来允许用户绘制多边形。
用户可以绘制多边形,但它必须是一个“简单”的多边形,而不是“复杂的”,即它不能自相交。
谷歌地图库似乎没有任何内置支持检测/防止自相交,所以我计划倾听用户创建每个点,然后我将运行检测算法来检查当前的折线/线串是自相交。
不幸的是,文档中唯一的事件是overlaycomplete 事件。
我可以等到用户完成绘制他们的多边形之前验证它并告诉他们这是不允许的,但是如果我能阻止他们首先放置点,这将是一个更好的体验,可能会为他们节省很多浪费了时间和精力。
我可以用我需要的功能构建我自己的绘图工具,但是当 Google 提供非常接近我需要的产品时,我宁愿避免创建和维护这样的东西。
我已经准备好了验证代码,我正在使用SO 上类似问题提供的 JSTS 代码,这是我要问的绘图管理器功能。
我试图计算两个三角形之间的交叉区域.我发现JSTS Topology Suite有一个Geometry类,它有一个方法intersection().我在JSFiddle和我的本地计算机上尝试过,但我得到了一个Uncaught TypeError: undefined is not a function.JSTS 还有一个例子.在这里你可以看到代码.我的代码在JSFiddle中看起来是一样的:
var union = triangleCoords.union(secondTriangleCoords);
var intersection = triangleCoords.intersection(secondTriangleCoords);
console.log('Intersection ' + intersection);
google.maps.geometry.spherical.computeArea(intersection);
Run Code Online (Sandbox Code Playgroud)
还有我应该做的转换吗?