public KDTree(Vector3[] points, Vector3 t, string TreeName) { if (points.Length == 0) { points = new Vector3[] { t }; } root = new KDTreeNode(points[0]); for (int i = 1; i < points.Length; i++) { AddPoint(points[i]); } //root = BuildFromPointsRec(points, 0, 0, points.Length); }
public KDTree(Vector3[] points, Vector3 t, string TreeName) { if (points.Length == 0) { Debug.LogWarning("<b><color=green>" + TreeName + "</Color></b>" + " => <color=red>AO bakening not correct!</color> The Tree Settings are too extreme! <i>Try to tweak the Tree!</i>"); points = new Vector3[] { t }; } root = new KDTreeNode(points[0]); for (int i = 1; i < points.Length; i++) { AddPoint(points[i]); } //root = BuildFromPointsRec(points, 0, 0, points.Length); }
private KDTreeNode BuildFromPointsRec(Vector3[] points, int axis, int start, int end) { Debug.Log(start + " " + end); if (start == end - 1) { Debug.Log(start); return(new KDTreeNode(points[start])); } //int medianIndex = SelectMedian(points, axis, start, end); int medianIndex = Random.Range(start, end - 1); KDTreeNode node = new KDTreeNode(points[medianIndex]); axis = (axis + 1) % 3; node.left = BuildFromPointsRec(points, axis, start, medianIndex); node.right = BuildFromPointsRec(points, axis, medianIndex, end); return(node); }
public void AddPoint(Vector3 point, int axis) { bool isLeft = position[axis] > point[axis]; KDTreeNode child = isLeft ? left : right; axis = (axis + 1) % 3; if (child == null) { child = new KDTreeNode(point); if (isLeft) { left = child; } else { right = child; } } else { child.AddPoint(point, axis); } }
public KDTree() { root = new KDTreeNode(Vector3.zero); }