【发布时间】:2015-04-13 16:50:54
【问题描述】:
我有一个由鼠标点击canvas 填充的坐标数组。
var pointsArray = [];
这个array 是pushed x 和 y 值使用点击事件。
pointsArray.push({x: xVal, y: yVal});
我迭代 points 数组并在当前点和前一个点之间画一条线。
function drawPolygon(points) {
//check arguments for null values
if(!points)
return false;
var i;
for(i = 0; i < points.length; i++)
drawLine(points[i-1], points[i]);
//draw the final line
drawLine(points[i-1], points[0]);
}
drawLine 看起来像这样:
function drawLine(point1, point2) {
//check arguments for null values
if(!point1 || !point2)
return false;
context.beginPath();
context.moveTo(point1.x, point1.y);
context.lineTo(point2.x, point2.y);
context.stroke();
}
不幸的是,根据用户点击的顺序,我可以让线条相交,这是我不想要的:http://i.imgur.com/3gaHRTa.png 我该如何解决这个问题?我的第一直觉告诉我在array 中从上到下、从左到右排列点,然后绘制。
【问题讨论】:
-
只是为了澄清,所以这些线条并不是真正根据用户点击顺序绘制的,对吧?
-
正确。必须仅形成单个多边形,不基于点击顺序。
-
假设你有 (0,0), (0,1), (1,1), (1,0)。如果您按此顺序单击这些点,您将看到一个正方形。但是如果按以下顺序点击它们(0,0),(1,1),(1,0),(0,1),在这种情况下,预期的结果是什么?同一个广场?或者 (1,0) 将因为相交而被跳过,最终结果将是三角形 (0,0), (1,1), (0,1) ?你能发一个小提琴吗?尝试实验可能更容易......
-
应该是同一个正方形。调用
drawPolygon时不会“删除”任何点。 -
@helpYou jsfiddle.net/8jpk4gr2
标签: javascript html canvas