Содержание
- 3. Преобразование плоскости называется аффинным, если оно взаимно однозначно; образом любой прямой является прямая. Преобразование называется взаимно
- 4. Однородные координаты Однородные координаты — координаты, обладающие тем свойством, что определяемый ими объект не меняется при
- 5. Примеры движений. Примеры аффинных преобразований
- 6. Простейшие преобразования Сжатие/растяжение Поворот Параллельный перенос Отражение
- 7. 1) каждое из приведенный преобразований имеет простой и наглядный геометрический смысл 2) любое преобразование всегда можно
- 8. Сжатие/растяжение Это преобразование умножает соответствующие координаты точек на коэффициенты масштабирования по осям: (x, y) -> (ax
- 9. Поворот Матрица преобразования : [cos(а) sin(а) 0 ] [-sin(а) cos(а) 0 ] [ 0 0 1
- 10. Параллельный перенос Исходный вектор (x, y) переходит в (x + dx, y + dy). Матрица преобразования:
- 11. Отражение [ -1 0 0 ] [ 1 0 0 ] [ 0 1 0 ]
- 12. Общий вид аффинного преобразования f(x) = x * R + t, где R – обратимая матрица
- 13. glRotate Функция glRotate поворачивает текущую матрицу на заданный угол вокруг заданного вектора. Имеет следующие формы: glRotated
- 14. Примеры вызова функции glRotate glRotated(45, 1, 0, 0) – поворот на 45 градусов против часовой стрелки
- 15. В функции glRotate вычисляется матрица поворота: выполняющая поворот на угол angle против часовой стрелки вокруг вектора,
- 17. glTranslate Функция glTranslate вносит дополнительное смещение в текущую матрицу. Имеет следующие формы: glTranslated(GLdouble x, GLdouble y,
- 18. Функция glTranslate выполняет сдвиг текущей матрицы на вектор (x, y, z). Этот вектор сдвига используется для
- 19. glScale Функция glScale масштабирует текущую матрицу. Имеет следующие формы: glScaled(GLdouble x, GLdouble y, GLdouble z) glScalef(GLfloat
- 20. В функции glScale вычисляется матрица масштабирования:
- 21. Текущая матрица умножается на матрицу преобразования, а затем результат этого произведения записывается в текущую матрицу. Таким
- 22. glLoadIdentity Функция glLoadIdentity заменяет текущую матрицу на единичную. glLoadIdentity ()
- 23. glPushMatrix, glPopMatrix Функции glPushMatrix и glPopMatrix предназначены для помещения матриц в стек и извлечения из него.
- 24. Примеры преобразований void DrawGrid(GLdouble r, GLdouble g, GLdouble b) { GLdouble dx = 1; for (int
- 25. Примеры преобразований void Draw() { glTranslated(0, 0, -30); glRotated(GetTickCount()/10.f , 0.1, 0.2, 0.3); glTranslated(0, 0, -10);
- 30. Равномерное движение Равномерное движение — механическое движение, при котором тело за любые равные отрезки времени проходит
- 31. Функция GetTickCount() function GetTickCount: Longint; Возвращает вpемя, пpошедшее с момента запуска системы в миллисекундах. float x
- 32. Равномерное движение Необходимые переменные: float xfrom = 0; float xto = 10; float v = 2;
- 33. Равномерное движение DrawRect(xfrom - 1.2, 0, 0.4, 10); DrawRect(xto + 1.2, 0, 0.4, 10); float x
- 34. Равномерное движение
- 35. Равномерное движение DrawRect(xfrom - 1.2, 0, 0.4, 10); DrawRect(xto + 1.2, 0, 0.4, 10); float x
- 36. Равномерное движение
- 37. Равномерное движение
- 38. Равномерное движение в плоскости Необходимые переменные: float xfrom = 0; float xto = 10; float vx
- 39. Равномерное движение в плоскости DrawRect(0-1.2, 5, 0.4, 12.8); DrawRect(10+1.2, 5, 0.4, 12.8); DrawRect(5, 0-1.2, 12, 0.4);
- 40. Равномерное движение в плоскости x = xfrom + vx*dtx; y = yfrom + vy*dty; if (((x>xto)
- 41. Равномерное движение в плоскости if (((y>yto) &&(yto>yfrom)) || ((y { vy = -vy; float ytemp =
- 42. Равномерное движение в плоскости
- 43. Равномерное движение по эллипсу Необходимые переменные: float vr = 90; int startTime = 0; float rx
- 44. Равномерное движение по эллипсу
- 45. Равномерное движение по криволинейной траектории float dt = (GetTickCount() - startTime)/1000.f; float x = rx*sin(dt*vx/0.7); float
- 46. Равномерное движение по криволинейной траектории
- 47. Равномерное движение по криволинейной траектории если убрать очистку цвета glClear( /*GL_COLOR_BUFFER_BIT |*/ GL_DEPTH_BUFFER_BIT );
- 48. Поворот и изменение размеров float scale = (sin(GetTickCount()/1000.f) + 2)/2.f; glScaled(scale, scale, 1); glRotated(GetTickCount()/10.f, 0, 0,
- 49. Поворот и изменение размеров
- 50. Пример движения планет DrawRound(vertex(0, 0, 0), 1, clRed); float angle = GetTickCount() / 100.f; float r
- 51. Пример движения планет angle = GetTickCount() / 30.f; r = 3.0; x = r*sin(angle*M_PI / 180);
- 53. Скачать презентацию