三维空间中的三角形旋转
2014-01-08 16:49
148 查看
//已知三角形的初始法向量、三个坐标点和终止法向量;求三角形保型旋转,及旋转后的坐标
//初始法向量叉乘终止法向量得三角形的旋转轴,同时可利用二向量求得旋转角度
//利用旋转轴和旋转角度计算其旋转向量,旋转向量的模长大小为旋转角度的弧度值
//初始法向量叉乘终止法向量得三角形的旋转轴,同时可利用二向量求得旋转角度
//利用旋转轴和旋转角度计算其旋转向量,旋转向量的模长大小为旋转角度的弧度值
// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <cv.h> //已知三角形的初始法向量、三个坐标点和终止法向量;求三角形保型旋转,及旋转后的坐标 //初始法向量叉乘终止法向量得三角形的旋转轴,同时可利用二向量求得旋转角度 //利用旋转轴和旋转角度计算其旋转向量,旋转向量的模长大小为旋转角度的弧度值 int _tmain(int argc, _TCHAR* argv[]) { //vector<CTriangle> ScaTrinagle;//存放分散的三角形 int rotatezhou[3];//旋转轴 float rotatevect[3]; //ScaTrinagle.resize(m_nTriangles); double angle = 3.14 / 2;//旋转角度 //利用旋转轴和旋转角度计算其旋转向量 rotatezhou[0] = 0; rotatezhou[1] = 1; rotatezhou[2] = 0; rotatevect[0] = rotatezhou[0] * angle; rotatevect[1] = rotatezhou[1] * angle; rotatevect[2] = rotatezhou[2] * angle; //从旋转向量求得旋转矩阵, double R_matrix[9]; CvMat pr_vec = *(cvCreateMat(1, 3, CV_64F)); CvMat pR_matrix = *(cvCreateMat(3, 3, CV_64F)); CvMat pdst = *(cvCreateMat(1, 3, CV_64F)); /*cvInitMatHeader(&pr_vec, 1, 3, CV_64FC1, rotatevect, CV_AUTOSTEP); cvInitMatHeader(&pR_matrix, 3, 3, CV_64FC1, R_matrix, CV_AUTOSTEP); cvInitMatHeader(&pdst, 1, 3, CV_64FC1, temp, CV_AUTOSTEP);*/ CV_MAT_ELEM(pr_vec, double, 0, 0) = rotatevect[0]; CV_MAT_ELEM(pr_vec, double, 0, 1) = rotatevect[1]; CV_MAT_ELEM(pr_vec, double, 0, 2) = rotatevect[2]; cvRodrigues2(&pr_vec, &pR_matrix, 0);//从旋转向量求得旋转矩阵 for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { printf("%f ", CV_MAT_ELEM(pR_matrix, double, i, j)); } printf("\n"); } printf("----------------------------\n"); //三角形的各顶点乘以旋转矩阵得各点旋转后的坐标 double src[3]; double dst[3]; src[0] = 0; src[1] = 0; src[2] = 1; cvInitMatHeader(&pr_vec, 1, 3, CV_64FC1, src, CV_AUTOSTEP); cvMatMul(&pr_vec, &pR_matrix, &pdst, 1); dst[0] = CV_MAT_ELEM(pdst, double, 0, 0); dst[1] = CV_MAT_ELEM(pdst, double, 0, 1); dst[2] = CV_MAT_ELEM(pdst, double, 0, 2); printf("%f %f %f\n", dst[0], dst[1], dst[2]); src[0] = 0; src[1] = 2; src[2] = 0; cvInitMatHeader(&pr_vec, 1, 3, CV_64FC1, src, CV_AUTOSTEP); cvMatMul(&pr_vec, &pR_matrix, &pdst, 1); dst[0] = CV_MAT_ELEM(pdst, double, 0, 0); dst[1] = CV_MAT_ELEM(pdst, double, 0, 1); dst[2] = CV_MAT_ELEM(pdst, double, 0, 2); printf("%f %f %f\n", dst[0], dst[1], dst[2]); src[0] = 0; src[1] = 0; src[2] = 0; cvInitMatHeader(&pr_vec, 1, 3, CV_64FC1, src, CV_AUTOSTEP); cvMatMul(&pr_vec, &pR_matrix, &pdst, 1); dst[0] = CV_MAT_ELEM(pdst, double, 0, 0); dst[1] = CV_MAT_ELEM(pdst, double, 0, 1); dst[2] = CV_MAT_ELEM(pdst, double, 0, 2); printf("%f %f %f\n", dst[0], dst[1], dst[2]); return 0; }
相关文章推荐
- HDOJ 2202 最大三角形 凸包旋转卡壳求最大三角形面积
- 三维空间中的旋转--旋转向量
- POJ2079 旋转卡壳 凸包内最大三角形
- OpenGL绘制旋转三角形实例
- opengl es3.0游戏开发学习笔记1-绘制旋转的三角形
- 三维空间中的旋转:旋转矩阵、欧拉角
- 三维空间中的旋转--旋转向量
- OpenGL画四个三角形组成四面体,并进行旋转
- C# Managed DirectX 三角形旋转(修改Direct 3D绘制流水线(渲染管线)中代码)
- 编写一个基于OpenGL的程序,绘制一个三角形,并分别绘制这个三角形经旋转、平移、缩放后的结果
- 三角形外接圆的圆心,向量旋转问题,求点(x1,y1)绕点(0,0)旋转a后坐标
- d3d实现一个旋转的三角形
- 24 WebGL从指定视点观察旋转后的三角形
- Codeforces Round #358 (Div. 2) E 计算几何 旋转卡壳求最大三角形面积
- poj2079 Triangle (旋转卡壳之最大三角形)
- D3D 旋转三角形 小例子
- 3D编程-旋转的三角形
- WebGL之旋转三角形
- Flash3D学习计划(三)——学习VB,IB相关,理解三角形顶点顺序;在屏幕上显示2D矩形,并实现缩放,平移,旋转
- HLSL学习笔记(一) —— 旋转的三角形