
Юзер
185 Отв.
|
И так проведя анализ работы скрипта я пришел к выводу, что при не целочисленном делении картинки на элементы, существует два пути решения: 1. оставлять картинку целиком и тогда возникнут элементы черной подложке (как было раньше с черной рамкой) или 2. ряд будет убираться (как это происходит сейчас), Это совершенно не так В абсолютном большинстве паззлов целочисленного деления нет и в помине. Укажите мне хоть один паззл на первой странице великой кучи, где есть хоть одно целочисленное деление. Следовательно, у большинства пазлов должно не хватать либо строчки, либо столбца, а это не так. Согласен, что проблема апроксимации размеров существует. Я сегодня-завтра поэкспериментирую и попытаюсь все же доказать, что я прав относительно пропадания строк и столбцов даже без наличия всего кода. И одновременно подумаю, как решается проблема корректного разбиения картинки сейчас и как это можно сделать.
10.11.2010 11:33:03
Цитировать выделенное
_______________________________
Не всем дано быть бизнесменами. Некотрые так и помрут математиками.
|

Модер
545 Отв.
|
а есть и третий вариант... делить с концом ноль)))) Рамка не нужна - слишком облегчает.. ну и кохда ряда нет обЫднооо
10.11.2010 10:44:02
Цитировать выделенное
_______________________________
Против глупости сами Боги бороться бессильны
|
Юзер
33 Отв.
|
Я знаю что Int. И так проведя анализ работы скрипта я пришел к выводу, что при не целочисленном делении картинки на элементы, существует два пути решения: 1. оставлять картинку целиком и тогда возникнут элементы черной подложке (как было раньше с черной рамкой) или 2. ряд будет убираться (как это происходит сейчас), другого пути решения проблемы не найдено. Это происходит в результате специфики работы с изображениями по целочисленным пикселям (по другому просто не бывает). Я прошу пользователей определиться вернуть мне полуэлементы с черными краями (надеюсь вы все еще помните что это?) или оставить все как есть.
10.11.2010 10:30:01
Цитировать выделенное
|

Юзер
185 Отв.
|
будет ли делиться картинка на куски если размер элемента дробный аргументы у функции imagecopy - имеют тип int поэтому если не знаете, как работает функция с дробными числами, преобразуйте их в целое самостоятельно
09.11.2010 19:18:05
Цитировать выделенное
_______________________________
Не всем дано быть бизнесменами. Некотрые так и помрут математиками.
|

Юзер
185 Отв.
|
Я использовал такой странный алгоритм чтобы вычислить не только количество строк и столбов, но и вычислить размер элемента пазла максимально приближенного к заданному пользователем: $rows1 = $height/$cellheight; тут используется размер пользователя $cols1 = $width/$cellwidth; и тут тоже
$cellheight=$height/floor($rows1); а тут делаем приблежение $cellwidth=$width/floor($cols1); и тут
и получаем новый размер элемента
а уже затем исходя из этого посчитать количество строк и столбов: $rows = floor($height/$cellheight); $cols = floor($width/$cellwidth);
так что ни чего выкинуть нельзя.
Я Вашу задумку, физический смысл - понял. Но реализация неверная. Ибо делает двойное тождественное вычисление. Вот если бы вместо $cellheight=$height/floor($rows1); $cellwidth=$width/floor($cols1); использовать $cellheight=floor($height/floor($rows1)); $cellwidth=floor($width/floor($cols1));
это было бы похоже на реализацию двойного приближения, и даже в этом случае я не уверен, что работало бы правильно
в любом случае дальнейший алгоритм мне неизвестен, а почему в моей картинке обрезало нижнюю строку - я показал, проверил у себя на сервере.
09.11.2010 17:01:00
Цитировать выделенное
_______________________________
Не всем дано быть бизнесменами. Некотрые так и помрут математиками.
|

Юзер
185 Отв.
|
Из-за этого двойного преобразования ошибка и возникла. Попробуйте с моей картинкой и указанными размерами элементов первый и второй вариант скрипта, и увидите, что дело только в этом.
09.11.2010 16:40:01
Цитировать выделенное
_______________________________
Не всем дано быть бизнесменами. Некотрые так и помрут математиками.
|
Юзер
33 Отв.
|
Собственно да, я догадался кажется в чем дело
09.11.2010 16:39:02
Цитировать выделенное
|

Юзер
185 Отв.
|
Показываю с точки зрения математики: пусть а=floor($rows1) в=$height с=$cellheight d=$rows тогда вместо $cellheight=$height/floor($rows1); $rows = floor($height/$cellheight); можно записать: c=b/a; d=b/c; во второе уравнение вместо с подставляем его значение из первого уравнения: d=b/(b/a)=a то есть $rows=floor($rows1)=floor($height/$cellheight);
Эта конструкция $rows1 = $height/$cellheight; $cols1 = $width/$cellwidth;
$cellheight=$height/floor($rows1); $cellwidth=$width/floor($cols1);
лишняя Она делает то же, при этом вносятся особенности вычислений с плавающей запятой в виде вышеназванной ошибки. Поверьте мне
09.11.2010 16:37:02
Цитировать выделенное
_______________________________
Не всем дано быть бизнесменами. Некотрые так и помрут математиками.
|
Юзер
6 Отв.
|
у меня есть мнение, что я не до конца понимаю, как работают некоторые функции в php будет ли делиться картинка на куски если размер элемента дробный и как происходит округление внутри функции, функция imagecopy
09.11.2010 16:25:05
Цитировать выделенное
|
Юзер
6 Отв.
|
Я использовал такой странный алгоритм чтобы вычислить не только количество строк и столбов, но и вычислить размер элемента пазла максимально приближенного к заданному пользователем: $rows1 = $height/$cellheight; тут используется размер пользователя $cols1 = $width/$cellwidth; и тут тоже
$cellheight=$height/floor($rows1); а тут делаем приблежение $cellwidth=$width/floor($cols1); и тут и получаем новый размер элемента
а уже затем исходя из этого посчитать количество строк и столбов: $rows = floor($height/$cellheight); $cols = floor($width/$cellwidth);
так что ни чего выкинуть нельзя.
09.11.2010 16:21:00
Цитировать выделенное
|