1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
| GrukhvinEV |
Сообщение
#1
|
|
Новичок ![]() Группа: Пользователи Сообщений: 21 Пол: Мужской Репутация: 0 |
Реализовать программу, строящую двумерное изображение заданной фигуры. Необходимо выполнить 2D преобразования и отобразить новое положение фигуры.
Эскизы прикрепленных изображений |
| TarasBer |
Сообщение
#2
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Задаёшь массив из 8 точек.
Для поворота на 45 градусов для каждой точки делаешь так: x_нов := (x+y)/sqrt(2) y_нов := (x-y)/(sqrt(2) Для относительно оси икс заменяешь все x на -x -------------------- |
| GrukhvinEV |
Сообщение
#3
|
|
Новичок ![]() Группа: Пользователи Сообщений: 21 Пол: Мужской Репутация: 0 |
Спасибо! Да мне бы всю картину решения задачи увидеть это мой первый опыт работы над графикой =))
|
| TarasBer |
Сообщение
#4
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Сообщение отредактировано: TarasBer - -------------------- |
| GrukhvinEV |
Сообщение
#5
|
|
Новичок ![]() Группа: Пользователи Сообщений: 21 Пол: Мужской Репутация: 0 |
Угу вот за это спасибо! Щас время нет, но завтро думаю разбирусь! Еще вот вопросик есть,
InitGraph(gd,gm,''); // файлы BGI должны быть в одной папке с программой у меня вообще файлов с расширением bgi нету, пользуюсь FreePascal 2.4.2 однако все работает нормально, так и должно быть ? |
| IUnknown |
Сообщение
#6
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 013 Пол: Мужской Ада: Разработчик Embarcadero Delphi: Сторонник Free Pascal: Разработчик Репутация: 627 |
Да, при использовании FPC это нормально. Его модулю Graph не нужны дополнительные драйверы.
P.S. Обновись, вышла уже 2.4.4 давно, чего на старой версии сидеть? Сообщение отредактировано: IUnknown - |
| GrukhvinEV |
Сообщение
#7
|
|
Новичок ![]() Группа: Пользователи Сообщений: 21 Пол: Мужской Репутация: 0 |
Спасибо. Посдскажите пожалуйста изменить положение осей x и y. Всю голову уже сломал.
У нас ось: _______________ x | | | | y А чтоб удобно было строить надо сделать их как всегда, как в школе было! Сообщение отредактировано: GrukhvinEV - |
| TarasBer |
Сообщение
#8
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
x переводишь в GetMaxX div 2+x
y переводишь в GetMaxY div 2-y Сообщение отредактировано: TarasBer - -------------------- |
| GrukhvinEV |
Сообщение
#9
|
|
Новичок ![]() Группа: Пользователи Сообщений: 21 Пол: Мужской Репутация: 0 |
Наверно даже надо писать за место y GetMaxY/2-y, а за место х GetMaxX/2-x. чтоб экран на 4 части разбить. Верно ?
|
| TarasBer |
Сообщение
#10
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
> Наверно даже надо писать за место y GetMaxY/2-y, а за место х GetMaxX/2-x. чтоб экран на 4 части разбить.
> Верно ? Не понял, я чем ваш вариант отличается от моего, кроме того, что вы добавили две ошибки? /2 не нужно, нужно div 2, вещественные вычисления привлекать не надо. икс нужно не вычитать, а прибавлять, потому что ориентацию по иксу менять не надо -------------------- |
| GrukhvinEV |
Сообщение
#11
|
|
Новичок ![]() Группа: Пользователи Сообщений: 21 Пол: Мужской Репутация: 0 |
А точно, извини просто уже крыша едет от pascala =))
Добавлено через 13 мин. Короче я уже сбился походу с верного пути, мне кажется что эту программу можно намного проще написать чем она у меня есть, подскажите где что можно упрастить и что исправить. Спасибо!
|
| TarasBer |
Сообщение
#12
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Да не, всё чётко.
Кроме того, что вместо
Нагляднее и короче так:
Но можно и ещё попридираться. Вот например:
Сейчас k и n несут очень мало геометрического смысла, они что-то типа "номер максимального элемента" или "количество точек минус один". Не лучше ли сразу сделать их количеством точек? Предпочтительнее так:
Перебор от 0 до эн минус 1 - это стандартно в программировании. Что ещё можно найти. А, ты вот k раз считаешь две точки, по сути у тебя все точки считаются по два раза. Короче, можно оптимизировать. У тебя пока так:
Я бы заранее посчитал k раз новые точки, и потом уже обращался к готовым точкам, не считая каждую 2 раза.
Ещё вроде есть готовая процедура для рисования ломаных. Сообщение отредактировано: TarasBer - -------------------- |
| IUnknown |
Сообщение
#13
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 013 Пол: Мужской Ада: Разработчик Embarcadero Delphi: Сторонник Free Pascal: Разработчик Репутация: 627 |
Цитата Ещё вроде есть готовая процедура для рисования ломаных. Есть, DrawPoly называется, в справке есть пример ее использования. |
| GrukhvinEV |
Сообщение
#14
|
|
Новичок ![]() Группа: Пользователи Сообщений: 21 Пол: Мужской Репутация: 0 |
Задаёшь массив из 8 точек. Для поворота на 45 градусов для каждой точки делаешь так: x_нов := (x+y)/sqrt(2) y_нов := (x-y)/(sqrt(2) Для относительно оси икс заменяешь все x на -x Ошибка тут, верно будет вот так: x_нов := (x-y)/sqrt(2) y_нов := (x+y)/(sqrt(2) И относительно оси икс надо менять y на -y Добавлено через 4 мин. Вот написал я программу дня за 3 )))) Зато сколько возможностей ))) Program Zadanie_2; Сообщение отредактировано: GrukhvinEV - |
| GrukhvinEV |
Сообщение
#15
|
|
Новичок ![]() Группа: Пользователи Сообщений: 21 Пол: Мужской Репутация: 0 |
Вот, мб кому пригодится!
Program Zadanie_2; {Имя программы}
|
| TarasBer |
Сообщение
#16
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
> Ошибка тут, верно будет вот так:
> x_нов := (x-y)/sqrt(2) > y_нов := (x+y)/(sqrt(2) А, ну может быть, это тоже поворот на 45, но в другую сторону. > И относительно оси икс надо менять y на -y А, ну да. Я прочитал как "вдоль оси икс". gm:=0 тоже проинициализируй > Figura(xc,yc,100,100,80,3,0,15); {Начальное положение фигуры} Тут привязка к фиксированному разрешению, лучше пересчитать через GetMaxX, GetMaxY -------------------- |
![]() ![]() |
|
Текстовая версия | 21.12.2025 4:42 |