javascript - 将新点添加到点数组中的正确位置

标签 javascript jquery algorithm graphics canvas

我有一个包含多个点的多边形,必须添加一个新点。现有的点存储在一个数组中:

var points = [
    {x: 0, y:0},
    {x: 100, y: 0},
    {x: 100, y: 100},
    {x: 0, y: 100}
];

你如何确定这个newPoint应该被添加到数组的哪个位置?

尝试:我遍历所有现有点并计算newPoint与它们的距离,并将现有点排序到包含这些点索引的数组中,按照与 newPoint 的距离增加的顺序。

按照我目前尝试的方法,下一步将检查最近的2个点是否相邻。如果是,则在 points 数组中添加它们之间的 newPoint。如果它们不相邻,那么我有点卡在这里了:)你如何检查这两个点是否相邻?

非常感谢任何帮助!

jsfiddle: http://jsfiddle.net/y3kmm/


顺序很重要的原因是因为形状通常是按顺时针方向绘制的。这是一个 jsfiddle,其中蓝色多边形在正确位置添加了一个点,红色多边形在 points 数组的末尾添加了一个点。

jsfiddle: http://jsfiddle.net/TyQXV/

最佳答案

正如我之前所说,您实际上不必使用排序来增加程序的复杂性:只需存储两个初始点,将它们视为最接近的点,然后在迭代另一个点时替换它们。

但是,您的问题有不止一种可能的解决方案;您必须为其定义更多约束。

例如,考虑形成正方形的四个点:

·-------·
|       |
|       |
|       |
·-------·

现在,在多边形内的随机位置添加一个点:

·-------·
|       |
| ·     |
|       |
·-------·

有两种以上的可能顺序仍然会保持您的多边形凸:

·-------·
 \      |
  ·     |
 /      |
·-------·

·   ____·
|\ /    |
| ·     |
|       |
·-------·

关于javascript - 将新点添加到点数组中的正确位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14025464/

相关文章:

javascript - JavaScript 未执行

javascript - 如何使用大表提高性能?

javascript - 网络图

消除相似条目的 SQL 查询

c++ - 数据结构中的 MST 和唯一性问题已解决 Ex?

python - 使用递归或迭代方法在 Python 中构建嵌套的树状结构

javascript - 使用 jQuery wrapAll() 包装多个重复出现的元素

javascript - 一旦最后一个 li 在屏幕上可见,就停止滚动

javascript - 将 jQuery 砌体与绝对定位的父对象一起使用?

jquery - div onclick 在 imageFlow ipad 中不起作用