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