![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| decembrist |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 1.4.2004 Репутация: нет Всего: нет |
Как повернуть фигуру на заданный угол?
|
|||
|
||||
| chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 6 Всего: 44 |
где какую фигуру7
|
|||
|
||||
| decembrist |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 1.4.2004 Репутация: нет Всего: нет |
Эллипс в OnPaint()
|
|||
|
||||
| Royan |
|
|||
|
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: нет Всего: 15 |
http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=04, а еще можешь спросить у cardinal'a, он тут изобрел вращение поворотом оси
-------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 2 Всего: 99 |
-------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
ну и зачем грузить человека поворотом в трехмерном пространстве, когда он спрашивает про поворот эллипса?
а что касается поворота... не примпоминаю, чтоб встречал подобную функцию в стандартных, в голову приходит только один способ - рисовать его вручную... -------------------- qqq |
|||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 93 |
Вроде можно систему координат повернуть. Только не помню как. Сейчас посмотрю.
-------------------- Да. Именно так. |
|||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 93 |
Вот чего вычитал:
А поворот выполняется на 0.123 радиана. Это сообщение отредактировал(а) Дрон - 7.7.2004, 19:53 -------------------- Да. Именно так. |
|||
|
||||
| decembrist |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 1.4.2004 Репутация: нет Всего: нет |
Дело в том что систему координат мне поворачивать нельзя у меня там другие объекты нарисованы Мне нужно только фигуру повернуть (в 2D!!!)
|
|||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 93 |
А поворот системы на уже нарисованное не влияет. Поворачиваешь, потом рисуешь, потом восстанавливаешь обычную. ЗЫ: Что самому проверить сложно? Это сообщение отредактировал(а) Дрон - 8.7.2004, 13:11 -------------------- Да. Именно так. |
|||
|
||||
| BraM's |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 63 Регистрация: 2.7.2004 Репутация: нет Всего: 1 |
А не проще ли на матрицу поворота домножить?
|
|||
|
||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 2 Всего: 99 |
BraM's, ты о чем?
-------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Дрон,
SetWorldTransform не работает под Win9x/Me... decembrist, можно отрисовать эллипс в контекст в памяти, повернуть массив точек, и перебросить из контекста памяти в контекст окна ф-цией BitBlt -------------------- ![]() |
|||
|
||||
| Дрон |
|
||||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 93 |
Есть такое... Мож ещё с Win 3.0 совместимость оставить?
Медленно как-то. Хотя другого пути сходу и не придумать... -------------------- Да. Именно так. |
||||
|
|||||
| decembrist |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 1.4.2004 Репутация: нет Всего: нет |
Народ что-то криво получается и как-то глаз не радует
Рисую развернутый эллипс с помощью ф-ции 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); } Как получить эллипс в чистом виде? |
|||
|
||||
| decembrist |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 1.4.2004 Репутация: нет Всего: нет |
Народ! что, никто не хочет помочь?
|
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Что за "эллипс" получается такой
Легче было бы создать эллиптический регион и рисовать через pDC->FillRgn. -------------------- ![]() |
|||
|
||||
| decembrist |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 1.4.2004 Репутация: нет Всего: нет |
А разве еллиптический регион влияет на поворот? У меня с поворотом проблема
|
|||
|
||||
| decembrist |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 1.4.2004 Репутация: нет Всего: нет |
Народ! Повернул я этот чертов эллипс. Но вот фигня возникла
При изменении угла наклона появляетя зернистость или какой-нибудь узорчатый рисунок Как от него избавиться? Может на OpenGL перейти? |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |