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