Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поворот фигуры 
:(
    Опции темы
decembrist
Дата 7.7.2004, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 1.4.2004

Репутация: нет
Всего: нет



Как повернуть фигуру на заданный угол?
PM MAIL   Вверх
chaos
Дата 7.7.2004, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



где какую фигуру7
PM WWW   Вверх
decembrist
Дата 7.7.2004, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 1.4.2004

Репутация: нет
Всего: нет



Эллипс в OnPaint()
PM MAIL   Вверх
Royan
Дата 7.7.2004, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: нет
Всего: 15



http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=04, а еще можешь спросить у cardinal'a, он тут изобрел вращение поворотом оси hehe.gif


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
cardinal
Дата 7.7.2004, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 2
Всего: 99



читай тут
http://forum.vingrad.ru/index.php?showtopic=22163
, правда обяснений кода там нет smile.gif


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
maxim1000
Дата 7.7.2004, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



ну и зачем грузить человека поворотом в трехмерном пространстве, когда он спрашивает про поворот эллипса? smile.gif
а что касается поворота...
не примпоминаю, чтоб встречал подобную функцию в стандартных, в голову приходит только один способ - рисовать его вручную...


--------------------
qqq
PM WWW   Вверх
Дрон
Дата 7.7.2004, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 93



Вроде можно систему координат повернуть. Только не помню как. Сейчас посмотрю.



--------------------
Да. Именно так.
PM   Вверх
Дрон
Дата 7.7.2004, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 93



Вот чего вычитал:
Цитата
     XFORM Xform;
     float Angle = 0.123;
     Xform.eM11 = cos(Angle);
     Xform.eM12 = sin(Angle);
     Xform.eM21 = -sin(Angle);
     Xform.eM22 = cos(Angle);
     Xform.eDx = 0;
     Xform.eDy = 0;

     SetGraphicsMode(hDC,GM_ADVANCED);
     SetWorldTransform(hDC,&Xform);
     Ellipse(hDC,10,10,100,50);
При этом hDC это контекст устройства, в котором выполняем рисование.
А поворот выполняется на 0.123 радиана.

Это сообщение отредактировал(а) Дрон - 7.7.2004, 19:53


--------------------
Да. Именно так.
PM   Вверх
decembrist
Дата 8.7.2004, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 1.4.2004

Репутация: нет
Всего: нет



Дело в том что систему координат мне поворачивать нельзя у меня там другие объекты нарисованы Мне нужно только фигуру повернуть (в 2D!!!)
PM MAIL   Вверх
Дрон
Дата 8.7.2004, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 93



Цитата
Дело в том что систему координат мне поворачивать нельзя у меня там другие объекты нарисованы Мне нужно только фигуру повернуть (в 2D!!!)

А поворот системы на уже нарисованное не влияет.
Поворачиваешь, потом рисуешь, потом восстанавливаешь обычную.

ЗЫ: Что самому проверить сложно? sad.gif

Это сообщение отредактировал(а) Дрон - 8.7.2004, 13:11


--------------------
Да. Именно так.
PM   Вверх
BraM's
Дата 8.7.2004, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 2.7.2004

Репутация: нет
Всего: 1



А не проще ли на матрицу поворота домножить?
PM MAIL ICQ   Вверх
cardinal
Дата 8.7.2004, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 2
Всего: 99



BraM's, ты о чем?


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
mr.DUDA
Дата 8.7.2004, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



Дрон,
SetWorldTransform не работает под Win9x/Me...

decembrist,
можно отрисовать эллипс в контекст в памяти, повернуть массив точек, и перебросить из контекста памяти в контекст окна ф-цией BitBlt


--------------------
user posted image
PM MAIL WWW   Вверх
Дрон
Дата 9.7.2004, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 93



Цитата
SetWorldTransform не работает под Win9x/Me...

Есть такое... Мож ещё с Win 3.0 совместимость оставить? smile.gif

Цитата
можно отрисовать эллипс в контекст в памяти, повернуть массив точек, и перебросить из контекста памяти в контекст окна ф-цией BitBlt

Медленно как-то. Хотя другого пути сходу и не придумать...


--------------------
Да. Именно так.
PM   Вверх
decembrist
Дата 12.7.2004, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 1.4.2004

Репутация: нет
Всего: нет



Народ что-то криво получается и как-то глаз не радует sad.gif
Рисую развернутый эллипс с помощью ф-ции RotBlt - она описана ниже
void CEllipseDlg::OnPaint()
{
CPaintDC dc(this);
CDC *pDC = &dc;
const int ellipseR1 = 100, ellipseR2 = 50, ellipseTop = 50, ellipseLeft = 10;
int Rmin = min(ellipseR1,ellipseR2);
int Rmax = max(ellipseR1,ellipseR2);

CDC memDC;
memDC.CreateCompatibleDC(pDC);
CBitmap *pPrevBmpMem=memDC.GetCurrentBitmap();
CRect rCl;
GetClientRect(rCl);
CBitmap BmpNewMem;
BmpNewMem.CreateCompatibleBitmap(pDC, rCl.Width(), rCl.Height());
memDC.SelectObject(&BmpNewMem);
memDC.FillSolidRect(rCl, GetSysColor(COLOR_3DFACE));
CDC *pDCTemp=pDC;
pDC=&memDC;

for (int i = 0; i < Rmin; i++)
{
int color = int(float(i)*float(255) /float(Rmin));

CPen pen(PS_SOLID, 2, RGB(0, color, 0));
pDC->SelectObject(&pen);
CRect inRect(ellipseTop+i, ellipseLeft+i, 2*ellipseR1-i+ellipseTop, ellipseR2-i+ellipseLeft);
pDC->Ellipse(&inRect);
}
HDC hDC=pDC->GetSafeHdc();

RotBlt(hDC,rCl.top, rCl.left, rCl.Width(), rCl.Height(),dcMem,rCl.left, rCl.top,45, SRCCOPY);
pDC=pDCTemp;
pDC->BitBlt(rCl.left, rCl.top, rCl.Width(), rCl.Height(), &memDC, rCl.left, rCl.top, SRCCOPY);
memDC.SelectObject(pPrevBmpMem);
}

Ф-ция поворота:
void RotBlt(HDC destDC,int srcx1,int srcy1,int srcx2,int srcy2,
HDC srcDC,int destx1, int desty1, int thetaInDegrees, DWORD mode)
{
double theta = thetaInDegrees*(3.14159/180); //convert to radians

//determine width and height of source
int width = srcx2-srcx1;
int height = srcy2-srcy1;

//center/pivot point of source
int centreX = int(float(srcx2+srcx1)/2);
int centreY = int(float(srcy2+srcy1)/2);

//allocate a rectangle which can hold the image in any orientation
if (width>height) height = width;
else width = height;

//allocate memory
HDC memDC = CreateCompatibleDC(destDC);
HBITMAP memBmp = CreateCompatibleBitmap(destDC,width,height);

HBITMAP obmp = (HBITMAP)SelectObject(memDC,memBmp);

//pivot point of our memDC
int newCentre = int(float(width)/2);

//rotation
for(int x = srcx1;x<=srcx2;x++)
for(int y = srcy1;y<=srcy2;y++)
{
COLORREF col = GetPixel(srcDC,x,y);
int newX = int((x-centreX)*sin(theta)+(y-centreY)*cos(theta));
int newY = int((x-centreX)*cos(theta)-(y-centreY)*sin(theta));
SetPixel(memDC, newX+newCentre, newY+newCentre, col);
}

//splash onto the destination
BitBlt(destDC,destx1,desty1,width,height,memDC,0,0,mode);

//free memory
SelectObject(memDC,obmp);
DeleteDC(memDC);
DeleteObject(memBmp);

}

Как получить эллипс в чистом виде? omg.gif
PM MAIL   Вверх
decembrist
Дата 12.7.2004, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 1.4.2004

Репутация: нет
Всего: нет



Народ! что, никто не хочет помочь? thumbs-up.gif Или с кодом разбираться лень? У меня что-то с контекстом памяти напутано и не могу разобраться в чем дело butbut.gif
PM MAIL   Вверх
mr.DUDA
Дата 12.7.2004, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



Что за "эллипс" получается такой wow.gif ?
Легче было бы создать эллиптический регион и рисовать через pDC->FillRgn.


--------------------
user posted image
PM MAIL WWW   Вверх
decembrist
Дата 13.7.2004, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 1.4.2004

Репутация: нет
Всего: нет



А разве еллиптический регион влияет на поворот? У меня с поворотом проблема bored.gif
PM MAIL   Вверх
decembrist
Дата 14.7.2004, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 1.4.2004

Репутация: нет
Всего: нет



Народ! Повернул я этот чертов эллипс. Но вот фигня возникла
При изменении угла наклона появляетя зернистость или какой-нибудь узорчатый рисунок Как от него избавиться? Может на OpenGL перейти?
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1318 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.