global proc int getNearIDAttr(string $particleShapeName,int $id){ float $tmp[] = `eval("getParticleAttr -at nearID -array true "+$particleShapeName+".pt["+$id+"]")`; int $nearID = $tmp[0]; return $nearID; } global proc float getDistance(int $myID, string $particleShapeName, int $compareID){ float $position1[] = `eval("getParticleAttr -at position -array true "+$particleShapeName+".pt["+$myID+"]")`; float $position2[] = `eval("getParticleAttr -at position -array true "+$particleShapeName+".pt["+$compareID+"]")`; float $tmpX = $position1[0]-$position2[0]; float $tmpY = $position1[1]-$position2[1]; float $tmpZ = $position1[2]-$position2[2]; return sqrt(pow($tmpX,2)+pow($tmpY,2)+pow($tmpZ,2)); } global proc int findNearestID(int $myID, string $particleShapeName, int $numOfComparing){ float $nearestDistance = -1; int $nearestID = -1; int $totalNumOfParticle = `eval("getAttr "+$particleShapeName+".count")`; for($i = 0; $i < $numOfComparing; $i++){ seed($i+$myID); if(getNearIDAttr($particleShapeName,floor(rand($totalNumOfParticle))) != -1 && $i != $myID){ float $distance = getDistance($myID,$particleShapeName,$i); if($nearestDistance == -1 || $nearestDistance > $distance){ $nearestDistance = $distance; $nearestID = $i; } } } return $nearestID ; }