Efficient coordinate indexing

  Kiến thức lập trình

I have a triangle list, that has XYZ cooridnates per triangle node. I need a list of nodes and a list of triangle node indices from that. Close nodes should get the same index.
My C# code is:

        // ensureNodeAt
        // return node index. Avoid duplicates.
        public int ensureNodeAt(XYZ p, double eps_dist = 1e-9)
        {
            // backwards - most likely the one we seek is at the back
            for (int i = nodes.Count - 1; i >= 0; --i)
            {
                XYZ v = nodes[i].v - p;
                // dx = v.X - p.X;
                // dy = v.Y - p.Y;
                // dz = v.Z - p.Z;
                // dx = dx * dx + dy * dy + dz * dz;
                if (v.X * v.X + v.Y * v.Y + v.Z * v.Z < eps_dist)
                { return i; }
            }
            // Must add a new node
            nodes.Add(p);
            return nodes.Count - 1;
        }

        void work(List<XYZ> triangles){
            tri = new List<Tri>(triangles.Count / 3); // triangle indices
            nodes = new List<XYZ>(triangles.Count); // triangle nodes
            for (int i = 0; i < triangles.Count; i += 3)
            {
                var a = triangles[i];
                var b = triangles[i + 1];
                var c = triangles[i + 2];
                tri.Add(new Tri(ensureNodeAt(a, eps_dist), ensureNodeAt(b, eps_dist), ensureNodeAt(c, eps_dist)));
            }
        }

Is there any way to make this faster or run in parallel? I have like 900k of nodes.

Theme wordpress giá rẻ Theme wordpress giá rẻ Thiết kế website

LEAVE A COMMENT