Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static function RandomArray3D(quantity : int, randomMin : Vector3, randomMax : Vector3, distanceApart : float) : Vector3[]
- {
- var positions = new Vector3[quantity];
- for (i = 0; i < positions.length; i++)
- {
- positions[i] = Vector3(
- Random.Range(randomMin.x, randomMax.x),
- Random.Range(randomMin.y, randomMax.y),
- Random.Range(randomMin.z, randomMax.z)
- );
- }
- var anyOverlapping = true;
- while (anyOverlapping)
- {
- anyOverlapping = false;
- for (var p1n = 0; p1n < positions.Length-1; ++p1n) {
- for (var p2n = (p1n+1); p2n < positions.length; ++p2n) {
- var p1 = positions[p1n];
- var p2 = positions[p2n];
- // add check for if p1=p2 here!
- var delta = positions[p1n] - positions[p2n];
- var distance = delta.magnitude;
- if (distance < distanceApart) {
- var resolveDist = (distanceApart-distance) * 0.5;
- positions[p1n] = p1 - delta.normalized * resolveDist;
- positions[p2n] = p2 + delta.normalized * resolveDist;
- anyOverlapping = true;
- }
- positions[p1n].x = Mathf.Max(positions[p1n].x, randomMin.x);
- positions[p1n].y = Mathf.Max(positions[p1n].y, randomMin.y);
- positions[p1n].z = Mathf.Max(positions[p1n].z, randomMin.z);
- positions[p1n].x = Mathf.Min(positions[p1n].x, randomMax.x);
- positions[p1n].y = Mathf.Min(positions[p1n].y, randomMax.y);
- positions[p1n].z = Mathf.Min(positions[p1n].z, randomMax.z);
- positions[p2n].x = Mathf.Max(positions[p2n].x, randomMin.x);
- positions[p2n].y = Mathf.Max(positions[p2n].y, randomMin.y);
- positions[p2n].z = Mathf.Max(positions[p2n].z, randomMin.z);
- positions[p2n].x = Mathf.Min(positions[p2n].x, randomMax.x);
- positions[p2n].y = Mathf.Min(positions[p2n].y, randomMax.y);
- positions[p2n].z = Mathf.Min(positions[p2n].z, randomMax.z);
- }
- }
- }
- return positions;
- }
Advertisement
Add Comment
Please, Sign In to add comment