Это звучит очень простым, но я не могу получить мою голову вокруг этого:
У меня есть две точки, представляющие X: Y координаты
В первой итерации я хочу добавить средняя точка двух в массив ...
В следующей итерации я хочу добавить среднюю точку первой и второй, а затем среднюю точку между второй и третьей в массив ... и так далее. ..
(Im добавляет случайные суммы к оси y, чтобы сделать перемещение средней точки) Например
0:10, 10:10
первой итерации ...
0:10, 5:13, 10:10
Вторая итерация ...
0:10, 2,5: 12, 5:13, 7,5: 15, 10:10
и т.д. и т.п.Добавить срединные в массив и использовать их в следующей итерации
это код, я закончил с после попытки получить хоть что-то, чтобы работать:
<?php
header('Content-type: image/png');
$png_image = imagecreate(1024, 1024);
imagecolorallocate($png_image, 15, 142, 210);
$black = imagecolorallocate($png_image, 0, 0, 0);
imagesetthickness($png_image, 10);
$iterations = 5;
$noise = 10;
$points = array("0:512","1023:512");
for($iteration=0; $iteration < $iterations; $iteration++){
$new_array = array();
ksort($points);
for($i = 0; $i < sizeof($points)-1 ;$i++){
$previous = array("X" => split(":", $points[$i])[0], "Y" => split(":", $points[$i])[1]);
$next = array("X" => split(":", $points[$i+1])[0], "Y" => split(":", $points[$i+1])[1]);
$midpoint = ($previous["X"] + $next["X"])/2;
$midheight = (($previous["Y"] + $next["Y"])/2)+rand(0,$noise);
$npoint="$midpoint:$midheight";
array_push($new_array, $npoint);
}
$points = array_merge($points, $new_array);
}
ksort($points);
for($i=0;$i < sizeof($points)-1;$i++){
$previous = array("X" => split(":", $points[$i])[0], "Y" => split(":", $points[$i])[1]);
$current = array("X" => split(":", $points[$i+1])[0], "Y" => split(":", $points[$i+1])[1]);
// imageline($png_image, (int)$previous["X"], (int)$previous["Y"], (int)$current["X"], (int)$current["Y"], $black);
// imagefilledellipse ($png_image ,(int)$previous["X"], (int)$previous["Y"] , 8, 8 , $black);
imagestring ($png_image , 4 , (int)$previous["X"], (int)$previous["Y"] , $i , $black);
}
imagepng($png_image);
imagedestroy($png_image);
?>
по какой-то причине он добавляет точки на то же x иногда, но с разным значением y.
EDIT: попытка с функцией
$iterations = 5;
$noise = 10;
$points = array("0:512","1023:512");
$cit = 0;
function divide($pointArray){
global $noise, $cit, $iterations;
$arrayLength = sizeof($pointArray);
$tempArray = $pointArray;
for($i = 0; $i < $arrayLength-1 ;$i++){
$currentPoint = array("X" => split(":", $pointArray[$i])[0], "Y" => split(":", $pointArray[$i])[1]);
$nextPoint = array("X" => split(":", $pointArray[$i+1])[0], "Y" => split(":", $pointArray[$i+1])[1]);
$midpoint = ($currentPoint["X"] + $nextPoint["X"])/2;
$midheight = (($currentPoint["Y"] + $nextPoint["Y"])/2)+rand(0,$noise);
$npoint="$midpoint:$midheight";
array_splice($tempArray, $i+$i, 0, $npoint);
$cit++;
if($cit < $iterations){
divide($tempArray);
}else{
return $tempArray;
}
как 13 приходит в первой итерации – siddhesh
@siddhesh значения у начинается в 10, и случайное значение добавляется к нему – Minzkraut
использовать рекурсию для того чтобы достигнуть желаемого результата – siddhesh