IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

 
 Ответить  Открыть новую тему 
> Помогите разобратся , в повороте рисунка .
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 81
Пол: Мужской
Реальное имя: Шурик

Репутация: -  0  +


Набросал я ту код , хотел попробовать рисунок покрутить ,вокруг точки .
А он не только вертит , но ещё и жутко искажает рисунок.

Вот собственно код :

Код
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.


Помогите разобраться :
Это он из за округления координат искажается ? Или я в формулах ошибся ?


--------------------
Двадцать пятый час в сутках может появиться всего лишь из-за небольшой ошибки в программе.
Чтобы не воспользоваться сумасшедшими возможностями, нужно быть идиотом.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






SHnur
Ошибка в формуле:
Код
y2 :=cy+((cx+i)-cx)*sin(b*rad)+((cy+j)-cy)*cos(b*rad);

и все работает :yes:

Хотя комбинацию ((cx+i)-cx) я бы заменил на i rolleyes.gif

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 81
Пол: Мужской
Реальное имя: Шурик

Репутация: -  0  +


volvo , точно smile.gif
Спасибо большое !
Цитата
Хотя комбинацию ((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 -


--------------------
Двадцать пятый час в сутках может появиться всего лишь из-за небольшой ошибки в программе.
Чтобы не воспользоваться сумасшедшими возможностями, нужно быть идиотом.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Пионер
**

Группа: Пользователи
Сообщений: 81
Пол: Мужской
Реальное имя: Шурик

Репутация: -  0  +


volvo , а есть ли способы , как покрасивее осуществить этот самый поворот ?
Думаю что из-за вынужденного округления координат ничего не получится , или я неправ ?


--------------------
Двадцать пятый час в сутках может появиться всего лишь из-за небольшой ошибки в программе.
Чтобы не воспользоваться сумасшедшими возможностями, нужно быть идиотом.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






SHnur
Цитата
покрасивее осуществить этот самый поворот

В каком смысле "покрасивее"? В смысле кода или результата?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Пионер
**

Группа: Пользователи
Сообщений: 81
Пол: Мужской
Реальное имя: Шурик

Репутация: -  0  +


Результата , конечно smile.gif


--------------------
Двадцать пятый час в сутках может появиться всего лишь из-за небольшой ошибки в программе.
Чтобы не воспользоваться сумасшедшими возможностями, нужно быть идиотом.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Результата - вряд ли, уж очень маленькая картинка...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Бывалый
***

Группа: Пользователи
Сообщений: 180
Пол: Мужской

Репутация: -  2  +


я делал поворот картинки с помощью алгоритма рисования линии... вообще без дробных чисел. Картинка (1024х768) спокойно вертится в реальном времени, без всяких дырок и искажений. Но это довольно сложно реализовать, хотя теоретически все просто...
а если делать с синусами и косинусами, то можно сгладить дырки после поворота, например так: рисуешь повернутый спрайт в другой массив, потом все черные точки в нем заполняешь усредненным цветом... думаю, получится неплохо
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 17.05.2024 4:33
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name