![]() |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
![]() |
SHnur |
![]()
Сообщение
#1
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 81 Пол: Мужской Реальное имя: Шурик Репутация: ![]() ![]() ![]() |
Набросал я ту код , хотел попробовать рисунок покрутить ,вокруг точки .
А он не только вертит , но ещё и жутко искажает рисунок. Вот собственно код : Код uses crt , graph; var gd , gm : integer; const Sokol : array[-8..8,-2..13] of byte =((00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00), (00,00,15,15,15,15,15,00,00,00,00,00,00,00,00,00), (00,15,15,08,08,15,15,15,15,00,00,00,00,00,00,00), (00,00,15,08,01,08,08,08,15,15,00,00,00,00,00,00), (00,15,15,08,01,01,01,01,08,15,15,15,00,00,00,00), (00,00,15,08,01,01,01,01,01,08,08,15,15,00,00,00), (00,00,15,08,01,01,01,01,01,01,01,08,15,15,00,00), (00,00,15,08,01,01,01,01,01,01,01,01,08,15,15,00), (00,00,15,08,01,01,01,01,01,01,01,01,08,15,15,15), (00,00,15,08,01,01,01,01,01,01,01,01,08,15,15,00), (00,00,15,08,01,01,01,01,01,01,01,08,15,15,00,00), (00,00,15,08,01,01,01,01,01,08,08,15,15,00,00,00), (00,15,15,08,01,01,01,01,08,15,15,15,00,00,00,00), (00,00,15,08,01,08,08,08,15,15,00,00,00,00,00,00), (00,15,15,08,08,15,15,15,15,00,00,00,00,00,00,00), (00,00,15,15,15,15,15,00,00,00,00,00,00,00,00,00), (00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00)); rad = PI /180; var cx , cy : integer; b,a : integer; procedure DrawShip; var i , j : integer; x2 , y2 : real; begin for i := -2 to 13 do begin for j := -8 to 8 do begin x2 :=cx+((cx+i)-cx)*cos(b*rad)-((cy+j)-cy)*sin(b*rad); y2 :=cy+((cx+j)-cx)*sin(b*rad)+((cy+j)-cy)*cos(b*rad); putpixel(round(x2),round(y2),sokol[j,i]); end; end; end; begin gd := vga; gm := vgahi; initgraph(gd,gm''); cx := 300; cy := 200; for b := 0 to 360 do begin drawship; delay(4000); end; readln; end. Помогите разобраться : Это он из за округления координат искажается ? Или я в формулах ошибся ? -------------------- Двадцать пятый час в сутках может появиться всего лишь из-за небольшой ошибки в программе.
Чтобы не воспользоваться сумасшедшими возможностями, нужно быть идиотом. |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
SHnur
Ошибка в формуле: Код y2 :=cy+((cx+i)-cx)*sin(b*rad)+((cy+j)-cy)*cos(b*rad); и все работает :yes: Хотя комбинацию ((cx+i)-cx) я бы заменил на i ![]() Сообщение отредактировано: volvo - 8.01.2005 1:21 |
SHnur |
![]()
Сообщение
#3
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 81 Пол: Мужской Реальное имя: Шурик Репутация: ![]() ![]() ![]() |
volvo , точно
![]() Спасибо большое ! Цитата Хотя комбинацию ((cx+i)-cx) я бы заменил на i Когда я писал этот код , я явно думал о чём-то другом :p2: x2 :=cx+i*cos(b*rad)-j*sin(b*rad); y2 :=cy+i*sin(b*rad)+j*cos(b*rad); Так намного лучьше . Сообщение отредактировано: SHnur - 8.01.2005 1:36 -------------------- Двадцать пятый час в сутках может появиться всего лишь из-за небольшой ошибки в программе.
Чтобы не воспользоваться сумасшедшими возможностями, нужно быть идиотом. |
SHnur |
![]()
Сообщение
#4
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 81 Пол: Мужской Реальное имя: Шурик Репутация: ![]() ![]() ![]() |
volvo , а есть ли способы , как покрасивее осуществить этот самый поворот ?
Думаю что из-за вынужденного округления координат ничего не получится , или я неправ ? -------------------- Двадцать пятый час в сутках может появиться всего лишь из-за небольшой ошибки в программе.
Чтобы не воспользоваться сумасшедшими возможностями, нужно быть идиотом. |
volvo |
![]()
Сообщение
#5
|
Гость ![]() |
SHnur
Цитата покрасивее осуществить этот самый поворот В каком смысле "покрасивее"? В смысле кода или результата? |
SHnur |
![]()
Сообщение
#6
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 81 Пол: Мужской Реальное имя: Шурик Репутация: ![]() ![]() ![]() |
Результата , конечно
![]() -------------------- Двадцать пятый час в сутках может появиться всего лишь из-за небольшой ошибки в программе.
Чтобы не воспользоваться сумасшедшими возможностями, нужно быть идиотом. |
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
Результата - вряд ли, уж очень маленькая картинка...
|
P@sh@ |
![]()
Сообщение
#8
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 180 Пол: Мужской Репутация: ![]() ![]() ![]() |
я делал поворот картинки с помощью алгоритма рисования линии... вообще без дробных чисел. Картинка (1024х768) спокойно вертится в реальном времени, без всяких дырок и искажений. Но это довольно сложно реализовать, хотя теоретически все просто...
а если делать с синусами и косинусами, то можно сгладить дырки после поворота, например так: рисуешь повернутый спрайт в другой массив, потом все черные точки в нем заполняешь усредненным цветом... думаю, получится неплохо |
![]() ![]() |
![]() |
Текстовая версия | 21.06.2025 21:29 |