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