Javascript 查找相邻节点
我有一系列多边形,用3个矢量3个对象表示。即:Javascript 查找相邻节点,javascript,algorithm,dictionary,Javascript,Algorithm,Dictionary,我有一系列多边形,用3个矢量3个对象表示。即: { "a": [1,2], "b": [3,4], "c": [5,6] } 其中a、b、c是三角形的三个点,索引0,1分别是x、y 如果该对象在一个数组中,有50个左右的其他三角形,每个三角形都有一个共享顶点,那么我可以运行什么算法来创建兄弟三角形的索引数组?如果要查找共享一个公共顶点的三角形,创建一个对象,其关键点是顶点,其值是三角形数组或三角形数组或对象中的索引/关键点 假设您有一个不变的三角形数组,并按该数组的索引存储三角形:
{
"a": [1,2],
"b": [3,4],
"c": [5,6]
}
其中a、b、c
是三角形的三个点,索引0,1
分别是x、y
如果该对象在一个数组中,有50个左右的其他三角形,每个三角形都有一个共享顶点,那么我可以运行什么算法来创建兄弟三角形的索引数组?如果要查找共享一个公共顶点的三角形,创建一个对象,其关键点是顶点,其值是三角形数组或三角形数组或对象中的索引/关键点 假设您有一个不变的三角形数组,并按该数组的索引存储三角形:
var tria = [
{a: [1, 2], b: [3, 4], c: [0, 6]},
// more triangles ...
];
var adjacent = {};
function addAdjacent(vertex, tria) {
if (!(vertex in adjacent)) adjacent[vertex] = [];
adjacent[vertex].push(tria);
}
for (var i = 0; i < tria.length; i++) {
var t = tria[i];
addAdjacent(t.a, i);
addAdjacent(t.b, i);
addAdjacent(t.c, i);
}
如果要查找具有公共边的三角形,也可以使用此方法。然后,关键点由两个顶点组成。您必须找到一种方法使顶点的顺序唯一,以便边
[1,2],[5,0]
与其相反的边[5,0],[1,2]
。一种方法是使较小的顶点成为边的第一个点。(较小表示x坐标较小的顶点,如果x坐标等于n,则两个点都指向y坐标较小的顶点。)如果只有50个三角形,则不值得花时间对其进行过度设计。只需检查每一对并确定它们是否为同级/仅1个共享顶点或至少1个?你认为有可能找到具有共享顶点的同级三角形吗?@amit-大约有400多个三角形,使用50作为任意数字,这肯定是算法应该扩展的范围?但是是的,也许就像你说的,你需要优化分辨率,而不是暴力。但考虑到这一点,我需要这个手术尽快进行。
function isAdjacent(x, y) {
var t = tria[x];
if (t.a in adjacent && ~adjacent[t.a].indexOf(y)) return t.a;
if (t.b in adjacent && ~adjacent[t.b].indexOf(y)) return t.b;
if (t.c in adjacent && ~adjacent[t.c].indexOf(y)) return t.c;
return null;
}