![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
NeoSoft |
![]() ![]()
Сообщение
#1
|
![]() Группа: Пользователи Сообщений: 8 Пол: Мужской Реальное имя: Павел Соколов Репутация: ![]() ![]() ![]() |
Помогите, пожалуйста. Программа рабочая, поворачивает,
но при отклонении от горизонтали и вертикали в изображении появляются дырки(некот. пиксели становятся черн. цвета), может это из-за округения координат... Может формулы неправильные, предложите свою идею поворота. Если кому надо UPCX могу выложить. Program Rotate; Помогите... |
![]() ![]() |
Dr.Bugy |
![]()
Сообщение
#2
|
![]() Лихорадка неясного генеза. ![]() ![]() Группа: Пользователи Сообщений: 81 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
А какже 5-е правило радела(чуть выше твоего поста
![]() Почувствуй себя модератором ? Флейм, флуд и оффтоп преследуется по закону. Сообщение отредактировано: klem4 - 26.03.2006 8:45 -------------------- Мир промышленного программирования полон избыточной сложности. В результате такие критерии, как простота, надежность, компактность программ и эффективность исполняемого кода, теперь заменяются на один главный критерий — скорость реализации идей. Приоритет времени разработки понятен: человеческие ресурсы нынче стоят значительно выше, чем аппаратные. Но не теряем ли мы по дороге то ценное, что вернуть потом будет крайне тяжело?.. |
hardcase |
![]()
Сообщение
#3
|
![]() code warrior ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация: ![]() ![]() ![]() |
Попробуй "дырки" интерполировать.
Кроме того ты ДЛЯ КАЖДОГО пикселя считаешь синусы и косинусы! этож жуть как долго, посчитай 1 раз и - скорость раза в 2-3 возрастёт. -------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
NeoSoft |
![]()
Сообщение
#4
|
![]() Группа: Пользователи Сообщений: 8 Пол: Мужской Реальное имя: Павел Соколов Репутация: ![]() ![]() ![]() |
Попробуй "дырки" интерполировать. Кроме того ты ДЛЯ КАЖДОГО пикселя считаешь синусы и косинусы! этож жуть как долго, посчитай 1 раз и - скорость раза в 2-3 возрастёт. |
hardcase |
![]()
Сообщение
#5
|
![]() code warrior ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация: ![]() ![]() ![]() |
Спасибо за идею, но я новичок в программировании не мог бы ты код написАть. Или объяснить поподробнее (попонятнее). Вот для ускорения расчётов: Procedure DrawMatrix; {Осуществляет поворот(стырел на форуме)} Об интерполяции: я так думаю, можно фиксировать, какие пиксеми мы заполнили, а какие не заполнили - заполнять цветом, который является средним между цветами соседних пикселей. Но для этого предётся держать массив PicX x PicY булевых величин, что не очень хорошо... кажется был ещё какой-то вариант заполнения. -------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
NeoSoft |
![]()
Сообщение
#6
|
![]() Группа: Пользователи Сообщений: 8 Пол: Мужской Реальное имя: Павел Соколов Репутация: ![]() ![]() ![]() |
Вот для ускорения расчётов: ... Об интерполяции: я так думаю, можно фиксировать, какие пиксеми мы заполнили, а какие не заполнили - заполнять цветом, который является средним между цветами соседних пикселей. Но для этого предётся держать массив PicX x PicY булевых величин, что не очень хорошо... кажется был ещё какой-то вариант заполнения. ![]() |
NeoSoft |
![]() ![]()
Сообщение
#7
|
![]() Группа: Пользователи Сообщений: 8 Пол: Мужской Реальное имя: Павел Соколов Репутация: ![]() ![]() ![]() |
А нет ли другого изначально более качественного способа поворта изображения (матрицы), чтоб точки не поправлять???
|
NeoSoft |
![]()
Сообщение
#8
|
![]() Группа: Пользователи Сообщений: 8 Пол: Мужской Реальное имя: Павел Соколов Репутация: ![]() ![]() ![]() |
Procedure DrawMatrix; {Осуществляет поворот} Вопрос решён наполовину: изображение вертится, пустот в изображении нет (хотя качество страдает), но изображение выводится на экран в прямоугольнике, судя по всему H x W, и куча пикселей летает в дали от изображения, но в прямоугольнике... |
Malice |
![]()
Сообщение
#9
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: ![]() ![]() ![]() |
Расширь границы прямоуголиника (цифры от балды):
For i := -166 to 166 do Begin Добавь проверку: if (y2<PicY) and (y2>=0) and (x2<PicX) and (x2>=0) then |
hardcase |
![]()
Сообщение
#10
|
![]() code warrior ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация: ![]() ![]() ![]() |
Думаю, можно ещё так поступить (основная идея):
Анализировать, на какие пиксели попадает наша повёрнутая точка и в соответствии с этим ставить на них цвет в зависимости от площади, занимаемой этим кусочком повёрнутого пикселя. В случае, когда пиксель, на который мы бросаем цвет, уже окрашен мы просто смешиваем эти цвета - т.о. получится антиальязинг и будут дырки закрыты. -------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
NeoSoft |
![]()
Сообщение
#11
|
![]() Группа: Пользователи Сообщений: 8 Пол: Мужской Реальное имя: Павел Соколов Репутация: ![]() ![]() ![]() |
Program Rotate; { Программа поворота изображения на произвольный угол }Вот так всё работает ![]() Только всё ОЧЕНЬ МЕДЛЕННО работает ![]() |
Malice |
![]()
Сообщение
#12
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: ![]() ![]() ![]() |
Вот так всё работает ![]() Только всё ОЧЕНЬ МЕДЛЕННО работает ![]() Совсем не обязательно поворачивать каждую точку, поверни только 4 крайние и посчитай dx,dy по строке и dx,dy по высоте. Тогда в цикле можно x2 и y2 считать через сложение с предыдущей точкой. Должно быть быстрее. |
![]() ![]() |
![]() |
Текстовая версия | 17.07.2025 4:39 |