![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Sensitive |
![]()
Сообщение
#1
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 132 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
Вообще не знаю каким способом делать эту задачу.
Условие прилагается. Подскажите пожалуйста, как это всё реализовать. Эскизы прикрепленных изображений ![]() |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Если на диске должен быть только черный и белый сегмент (просто на картинке ж ничего не разобрать, поэтому уточняю), то все довольно просто: тебе понадобится только хранить углы начала/конца одного из сегментов, из этих данных элементарно находится, где начинается/заканчивается второй сегмент... Отрисовывать эти сегменты можно через Sector, а можно - PieSlice (еще один вариант - Arc + 2 линии)... При повороте просто увеличивать (или уменьшать, в зависимости от направления вращения) значения хранимых углов на определенное значение, которое будет тем больше, чем больше скорость...
А вот есть на диске есть еще что-то, кроме собственно линии разделения сегментов, то придется осуществлять поворот всего изображения (как-то делал, попробую найти ссылку, если надо, потому что делал для другого форума, не здесь...), но это чревато сильными тормозами, которые будут увеличиваться при увеличении размеров изображения. |
Sensitive |
![]()
Сообщение
#3
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 132 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
Да,на диске на белой его части есть частички (чёрные). Сам диск (если он черно-белый,то нарисовать не проблема(уже сделала),а вот эти кусочки не знаю как сделать(постараюсь сделать)). Если можно, то поищи где ты делал поворот всего изображения, потому что я не могу понять пока что как сделать. А там, если подскажешь, то думаю разберусь(надеюсь).
|
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Несколько способов есть здесь (перевести то, что там реализовано с Дельфи на Паскаль не составит труда):
Drkb -> Работа с графикой и мультимедиа -> Графические фильтры и эффекты -> Вращение, зеркальные преобразования (свою ссылку пока не нашел. Найду - выложу) |
klem4 |
![]()
Сообщение
#5
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Цитата тебе понадобится только хранить углы начала/конца одного из сегментов, из этих данных элементарно находится, где начинается/заканчивается второй сегмент... Отрисовывать эти сегменты можно через Sector, а можно - PieSlice (еще один вариант - Arc + 2 линии).. Помоему будет достаточно одного угла, второй то будет = первый + 180* ? Я вот тоже так пробовал, Sector + FillEllipse или Sector + Sector. Получается достаточно глючно (мерцание при маленькой задержке) ![]() Volvo ты пробовал ? Есть мысль не полностью сектора заливать, а сначала отрисовать окружность, на половину белую на половину черную, а потом, в цикле, перекрашивать FloodFill'ом маленкие кусочки, на которые будет осуществляться сдвиг прямой, делящей окружность на 2 половины. -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Цитата Помоему будет достаточно одного угла, второй то будет = первый + 180* ? Если диск разделен по диаметру, то хватит и одного...Цитата Получается достаточно глючно (мерцание при маленькой задержке) Исходник можно посмотреть?Я, кстати, если не надо было бы отрисовывать вот это: Цитата на белой его части есть частички (чёрные). , сделал бы совсем по-другому: просто разбил бы окружность, скажем, на 32 (можно и побольше) равных сектора, залил половину белым цветом, половину - черным, и поочередно "гасил" (сбрасывал в черный) один граничный сектор/"зажигал" противоположный.... Секторы маленькие, тормозов никаких... |
Sensitive |
![]()
Сообщение
#7
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 132 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
volvo, если можешь дай полную ссылку. Не смогла найти, где там есть эти варианты.
![]() |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Sensitive, я же дал полный путь к статьям
![]() Первая и вторая статьи в указанной папке полностью посвящены вращению изображений... |
klem4 |
![]()
Сообщение
#9
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Вроде этого
cx := GetMaxX div 2; Цитата сделал бы совсем по-другому: Вот это кстати интересно. Думаю так и стоит сделать. -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
Sensitive |
![]()
Сообщение
#10
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 132 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
Ой,сорри,volvo, всё нашла. Сейчас буду разбираться.Спасибо.
|
klem4 |
![]()
Сообщение
#11
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
В общем вот черновой вариант, есть небольшие нестыковочки, но работает намного быстрее.
uses crt, graph; -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
Sensitive |
![]()
Сообщение
#12
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 132 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
К моему сожалению не смогла разобраться в тех примерах, котрые вы давали на Делфи... но всё равно спасибо за старание всем.
|
Sensitive |
![]()
Сообщение
#13
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 132 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
к моему сожалению не смогла разобраться в тех примера,что вы давали на Делфи,но все равно всем большое спасибо за старание.
|
Sensitive |
![]()
Сообщение
#14
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 132 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
Я прошу прощения еще раз...
при повороте изображения какие нужно изменять параметры? |
klem4 |
![]()
Сообщение
#15
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
В твоем конкретном случае, при использовании предложенной тут реализации, изменяется угол под которым проходит прямая, делящая окружность на 2 части.
-------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
Sensitive |
![]()
Сообщение
#16
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 132 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
всё сижу над этим диском...
вот подпрограмма,которая рисует диск,но мне нужен такой же,только чтоб "дуги" чёрные на белом фоне были какбы отрзеркалины...то есть были не в правой части диска,а в левой...так как на рисунке... помогите переделать подпрограмму... procedure disk(f:real; r:integer) ; Эскизы прикрепленных изображений ![]() |
volvo |
![]()
Сообщение
#17
|
Гость ![]() |
Зачем тебе вручную рассчитывать все координаты, когда это за тебя может сделать Паскаль?
Запусти вот это, к примеру: uses graph; |
Sensitive |
![]()
Сообщение
#18
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 132 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
да,действительно и без ручного расчета тот код,что ты дал работает верно. Но я теперь не могу понять,как теперь остаток программы переделать. У меня всё получается делается для рисунка,если черные линиии справа...не могу понять что нужно изменить...или всё переделать надо?
uses graph,crt; P.S. Не знаю как сделать правильно движение это...подскажите, как сделать правильно поворот? Сообщение отредактировано: Sensitive - 7.06.2007 15:29 |
Sensitive |
![]()
Сообщение
#19
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 132 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
С диском так и "воюю"...
как закрасить диск,если программа выглядит таким образом: uses graph,crt; И в чём ошибка: почему "еллипс"(точнее его часть) вращается намного быстрее,чем дуги... ![]() |
volvo |
![]()
Сообщение
#20
|
Гость ![]() |
Вот так вращается одинаково:
uses graph, crt; |
![]() ![]() |
![]() |
Текстовая версия | 21.06.2025 15:59 |