|
 4.4 Кб |
|
| Необходим простенький алгоритм, к сожалению я не знаю php, а для спеца это пара минут.
Есть картинка с графиком ( в прицепе). Алгоритм следующий - берем нижнюю левую точку картинки и идем вверх по оси у, до встречи с точкой графика. Пишем значение У в массив. Далее, через 5 пикселов по Х ( это будет шаг) делаем тоже самое и пишем в массив 2-е значение. И так до конца оси Х, либо можно задать в ручную это кличество итераций.
После этого, записать этот массив в txt файл, между значениями разделитель /n | |
|
|
|
|
|
|
|
для: pandora2009
(03.02.2009 в 10:31)
| |
<?
$im = imagecreatefromgif("graph.gif");
$xc = imagesx($im);
$yc = imagesy($im);
$coords = array();
//это установка индекса для специфинированного цвета, в данном случае синего
$idx = imagecolorclosest($im, 0, 0, 255);
//ну а остальное и ежу понятно
for ($i = 0; $i < $xc; $i++) {
for ($k = 0; $k < $yc; $k += 5) {
if ($idx == imagecolorat($im, $i, $k)) $coords[] = array('x'=>$i, 'y'=>$k);
}
}
echo "<pre>";
print_r($coords);
echo "</pre>";
|
Как надо записать массив в текст - просто числа через разделитель (только не /n, а \n), либо лучше ассоциативный массив, думайте сами. | |
|
|
|
|
|
|
|
для: sim5
(03.02.2009 в 11:51)
| | там картинку перевернуть надо.
Кроме того, на вертикальных участках есть неоднозначность.
У меня вышло так:
<?php
$m = imagecreatefromgif("graf.gif");
$h = imagesy($m);
$w = imagesx($m);
$v = array();$s = '';
for($x = 0; $x < $w ; $v[$x++] = strrev($s))
for($s = '',$y = 0; $y < $h ; $y++)
{
$c = imagecolorat($m, $x, $y);
@$g[$c]++;
$s .= chr($c);
}
foreach($g as $c => $n)
{
$l = imagecolorsforindex($m, $c);
if( abs($l['red']-$l['green']) +
abs($l['blue']-$l['green'])+
abs($l['blue']-$l['red']) > 0)
$j = $c;
}
foreach($v as $x => $l)
{
$y0 = strpos($l, chr($j));
$y1 = strrpos($l, chr($j));
echo "$x $y0 $y1<br>";
}
?>
|
| |
|
|
|
|
|
|
|
для: Trianon
(03.02.2009 в 12:41)
| | Зачем перевернуть и какая неоднозначность? | |
|
|
|
|
|
|
|
для: sim5
(03.02.2009 в 12:43)
| | показания на графике отсчитываются от оси X вверх.
А нумерация линий в картинке - сверху вниз.
А неоднозначность в том, что каждый отсчет по Х представлен вертикальной линией из нескольких пикселей. Ну да это больше к автору вопроса.
Хотя он, судя по формулировке, вообще под ключ хочет... кривой... | |
|
|
|
|
|
|
|
для: Trianon
(03.02.2009 в 12:49)
| | А, вот в чем дело. Ну да, надо от начальных координат (0,0) было считать. Ну это не проблема, стоит только начальные значения сметить или в обратном порядке пройти цикл.
Ну а в другом проблем не вижу - индекс цвета будут точно определен на пересечении координат. А то что по несколько пикселей по Х.., так как я понял это не важно.
PS. Не знаю как автору надо, но мне кажется, что удобнее массив держать, потому бы сделал в конце цикла просто:
<?
file_put_contents("coords.txt", serialize($coords));
//и получал
$coords = unserialize(file_get_contents("coords.txt"));
|
| |
|
|
|
|
|
|
|
для: sim5
(03.02.2009 в 13:07)
| | Спасибо огромное всем!!! | |
|
|
|