【问题标题】:Algorithm to connect all points in a shape连接形状中所有点的算法
【发布时间】:2013-02-16 18:45:12
【问题描述】:

我试图弄清楚如何连接形状中的所有点,点的数量是动态的。

我用一个正方形来演示,有四个点:

a - 左上角, b - 右上角, c - 右下角, d - 左下角

所以...

var connections = [
    new Connection(a, b),
    new Connection(a, c),
    new Connection(a, d),
    new Connection(b, c),
    new Connection(b, d),
    new Connection(c, d)
];

连接正方形(或任何四边形多边形)中的所有点,但我想通过循环点数组自动执行此操作(为简单起见,此处显示为 abcd),因此它适用于任何多边形。我试图制定一个模式并在几个 for 循环中实现它,但失败了。我希望它真的很简单......

感谢任何帮助,谢谢。

【问题讨论】:

  • 只有大纲还是网页?
  • 如果这是您所描述的“正方形”,那么 A(左上)和 B(右下)之间的连接就没有意义了。您能否更具体地了解一下这里的“多边形”是什么,以及这里的连接是什么?
  • @JakeHeidt 任何具有 3 个或更多直边的形状。为什么左上角和右下角(C)之间的连接没有意义?连接只是一个理论上的对象。
  • 用一个工作演示更新了我的答案。希望对您有所帮助。

标签: javascript connection polygon point


【解决方案1】:

伪代码:

for (var i=0; i<Shape.Count; i++) {
  for (var j=i+1; j<Shape.Count; j++) {
    List.Add(i,j);
  }
}

【讨论】:

  • 太棒了,谢谢,这似乎工作得很好。除了if(i != j) 需要在List.Add() 之前添加以避免连接到自身的点。我知道这很简单!
  • 哈!当然。当然,它甚至比这更简单 - 请参阅上面的修改代码。
【解决方案2】:
var Connection = function (a, b) {
    console.log('Connecting ' + a + ' and ' + b);
}

var points = ['a','b','c','d','e'];

(function traverse() {
    for (var i = 0; i < points.length - 1; i += 1) {
        new Connection(points[0], points[ i + 1 ]);
    }
    points = points.slice(1);
    if (points.length > 1) {
        traverse(points);
    }
}());

这将输出:

Connecting a and b
Connecting a and c
Connecting a and d
Connecting a and e
Connecting b and c
Connecting b and d
Connecting b and e
Connecting c and d
Connecting c and e
Connecting d and e 

演示:http://jsfiddle.net/1j5n5x55/

【讨论】:

    猜你喜欢
    • 2018-05-25
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    相关资源
    最近更新 更多