duck

Untitled

Jun 17th, 2010
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2.  
  3.  
  4. static function RandomArray3D(quantity : int, randomMin : Vector3, randomMax : Vector3, distanceApart : float) : Vector3[]
  5. {
  6.     var positions = new Vector3[quantity];
  7.    
  8.     for (i = 0; i < positions.length; i++)
  9.     {
  10.         positions[i] = Vector3(
  11.             Random.Range(randomMin.x, randomMax.x),
  12.             Random.Range(randomMin.y, randomMax.y),
  13.             Random.Range(randomMin.z, randomMax.z)
  14.         );     
  15.     }
  16.    
  17.    
  18.     var anyOverlapping = true;
  19.     while (anyOverlapping)
  20.     {
  21.         anyOverlapping = false;
  22.         for (var p1n = 0; p1n < positions.Length-1; ++p1n) {
  23.             for (var p2n = (p1n+1); p2n < positions.length; ++p2n) {
  24.                 var p1 = positions[p1n];
  25.                 var p2 = positions[p2n];
  26.                 // add check for if p1=p2 here!
  27.                 var delta = positions[p1n] - positions[p2n];
  28.                 var distance = delta.magnitude;
  29.                 if (distance < distanceApart) {
  30.                     var resolveDist = (distanceApart-distance) * 0.5;
  31.                     positions[p1n] = p1 - delta.normalized * resolveDist;
  32.                     positions[p2n] = p2 + delta.normalized * resolveDist;
  33.                     anyOverlapping = true;
  34.                 }
  35.                
  36.                 positions[p1n].x = Mathf.Max(positions[p1n].x, randomMin.x);
  37.                 positions[p1n].y = Mathf.Max(positions[p1n].y, randomMin.y);
  38.                 positions[p1n].z = Mathf.Max(positions[p1n].z, randomMin.z);
  39.                 positions[p1n].x = Mathf.Min(positions[p1n].x, randomMax.x);
  40.                 positions[p1n].y = Mathf.Min(positions[p1n].y, randomMax.y);
  41.                 positions[p1n].z = Mathf.Min(positions[p1n].z, randomMax.z);
  42.  
  43.                 positions[p2n].x = Mathf.Max(positions[p2n].x, randomMin.x);
  44.                 positions[p2n].y = Mathf.Max(positions[p2n].y, randomMin.y);
  45.                 positions[p2n].z = Mathf.Max(positions[p2n].z, randomMin.z);
  46.                 positions[p2n].x = Mathf.Min(positions[p2n].x, randomMax.x);
  47.                 positions[p2n].y = Mathf.Min(positions[p2n].y, randomMax.y);
  48.                 positions[p2n].z = Mathf.Min(positions[p2n].z, randomMax.z);       
  49.             }
  50.         }
  51.     }  
  52.    
  53.    
  54.     return positions;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment