![]() |
Модераторы: Snowy, Alexeis, MetalFan |
![]() ![]() ![]() |
|
VyachNik |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 19.2.2012 Репутация: нет Всего: нет |
Доброго времени суток!
Помогите, пожалуйста, с решением задачи: Дан произвольный прямоугольник со сторонами х=n, y=m. Левая верхняя точка прямоугольника имеет координаты х=0, у=0, а правая нижняя точка - х=n, y=m. Возьмем произвольную точку на прямоугольнике, например, х=n/2, y=m/2. Для удобства обозначим n/2=i, m/2=j. Требуется радиально заполнить прямоугольник точками от точки х=n/2, y=m/2 к краям прямоугольника, оптимизировать алгоритм заполнения таким образом, чтобы код был наименьшим. Например, заполнение точками может происходить так: 01. x=i y=j (i=n/2, j=m/2) 02. x=i+1 y=j 03. x=i+1 y=j+1 04. x=i y=j+1 05. x=i-1 y=j+1 06. x=i-1 y=j 07. x=i-1 y=j-1 08. x=i y=j-1 09. x=i+1 y=j-1 10. x=i+2 y=j-1 11. x=i+2 y=j 12. x=i+2 y=j+1 13. x=i+2 y=j+2 14. x=i+1 y=j+2 15. x=i y=j+2 16. x=i-1 y=j+2 17. x=i-2 y=j+2 18. x=i-2 y=j+1 19. x=i-2 y=j 20. x=i-2 y=j-1 21. x=i-2 y=j-2 22. x=i-1 y=j-2 23. x=i y=j-2 24. x=i+1 y=j-2 25. x=i+2 y=j-2 26. x=i+3 y=j-2 и т.д. |
|||
|
||||
RomanEEP |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 18.5.2006 Где: Коломна Репутация: 1 Всего: 8 |
Можно заполнять прямоугольник горизонтальными линиями.
Допустим c1 - цвет центра, с2 - цвет вершин. R - половина диагонали. Тогда цвет каждой точки считаем по формуле c = c1 + (c2 - c1)*r/R, где r- расстояние от центра прямоугольника до данной точки или c = c1 + (c2 - c1)*sqrt(x*x+y*y)/R Для заполнения каждой строки y считаем 2 коэффициента m = (c2-c1)/R; n = y*y, тогда цвет каждой точки линии считаем по формуле с = с1+m*sqrt(x*x+n) - по этой формуле считаем все 3 или 4 компонента цвета и рисуем линию слева направо. Для оптимизации можно по такому алгоритму заполнить только четверть прямоугольника и скопировать остальные части симметрично |
|||
|
||||
Чучмек |
|
|||
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 2 Всего: 41 |
Это сообщение отредактировал(а) Чучмек - 20.2.2012, 22:45 -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
VyachNik |
|
||||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 19.2.2012 Репутация: нет Всего: нет |
за приведенный код большое спасибо, только некоторые моменты не совсем понятны, немогли бы вы немного разжевать, что к чему? какая переменная за что отвечает? скопировать код и проверить его на работоспособность большого труда не составит, а вот разобраться, что к чему... главное понять суть... если не затруднит... плиз... |
||||
|
|||||
Чучмек |
|
|||
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 2 Всего: 41 |
Идем по кругу, с каждым оборотом увеличиваем радиус.
Шаг радиуса dr Шаг поворота df (вот здесь завтык , должно быть df:=k/r; а не df:=k/(f*r); dr=0.6 df=0.9/r Если сделать больше - будут не зарисованные точки Это сообщение отредактировал(а) Чучмек - 20.2.2012, 22:50 -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
RomanEEP |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 18.5.2006 Где: Коломна Репутация: 1 Всего: 8 |
|
|||
|
||||
RomanEEP |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 18.5.2006 Где: Коломна Репутация: 1 Всего: 8 |
Более быстрая альтернатива на скайлайне:
|
|||
|
||||
Чучмек |
|
|||
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 2 Всего: 41 |
RomanEEP, Это принципиально разные вещи - градиент и радиальное заполнение.
Это сообщение отредактировал(а) Чучмек - 21.2.2012, 21:19 -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Звук, графика и видео" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |