ReturnDarkestPath MEL

From scripting
Jump to: navigation, search
global proc string ReturnDarkestPath(float $U, float $V, float $Rad, int $FanNum, string $SkipStr[], float $SkipRad) {
	//0001D LLC 2015 Nick Pisca
	//float $U = 0.896; float $V = 0.428; float $Rad = 0.1; int $FanNum = 6; 
	//string $SkipStr[] = {"0.888,0.777","0.555,0.6"}; float $SkipRad = 0.25;

	float $WinningLine = 100000.0;
	float $WinningLine2 = 100000.0;
	string $WinningStr;
	string $WinningStr2;
	
	vector $OrigVec = << $U, $V, 0.0 >>;
	for ($x=0;$x<$FanNum;$x++) {
		float $UnitCircPlace = ($x * 2 * 3.14159 / $FanNum) + 0.2;
		float $xCos = cos($UnitCircPlace);
		float $ySin = sin($UnitCircPlace);
		vector $RelVec = <<$xCos, $ySin, 0.0>>;
		vector $RelUnit = unit($RelVec);
		vector $RelRad = $Rad * $RelUnit;
		vector $CalcVec = $RelRad + $OrigVec;         // print($SkipStr);  print($CalcVec);

		
		if (($CalcVec.x > 0.0) && ($CalcVec.y > 0.0) && ($CalcVec.x < 1.0) && ($CalcVec.y < 1.0)) {
			float $Ave = ReturnAverageRGBThruPath($U, $V, ($CalcVec.x), ($CalcVec.y), 5, "file1");
			//print("Test: " + $Ave + ", " + $x + "\n");
			if ($Ave < $WinningLine2) {
				$WinningLine2 = $Ave;
				$WinningStr2 = string(($CalcVec.x)) + "," + string(($CalcVec.y));
			}
			if ($Ave < $WinningLine) {
				if (IsWithDistByString($SkipStr, $CalcVec, $SkipRad) == 0) {
					$WinningLine = $Ave;
					$WinningStr = string(($CalcVec.x)) + "," + string(($CalcVec.y));
					//print("     Win: " + $Ave + ", " + $x + "," + $WinningStr + "\n");
				}
			}
		}
	}
	
	if ($WinningStr == "") {
		print ("Problems... \n");
		vector $TVec = ConvertStrToVector($WinningStr2);
		vector $TVDiff = $OrigVec - $TVec;
		vector $TVDiffMod = $TVDiff * 7; //$TVDist2;
		vector $TV2 = $OrigVec - $TVDiffMod;
		$TV2 = FixUnboundedVector($TV2);
		
		string $Win3 = string(($TV2.x)) + "," + string(($TV2.y));
		return $Win3;
	}
	
	return $WinningStr ;
}


More information on vectors and arrays, read pages 12-16 in YSYT.