#include <iostream>
#include <iomanip>
using namespace std;
#include <stdio.h>
#include <math.h>
//////////////////////////////////////////////////////////
#define A 1
#define B 0
///////////////////////////////////////////////////////////
//
void main()
{
int i,j,k;
float xr,yr,zr,xn,yn,zn,xu,yu,zu,b1,b2,b3,x0,y0,z0,d;
double a[4][4]={{0,0,0,0}},b[4][4]={{0,0,0,0}},c[4][4]={{0,0,0,0}};
cout<<"请给出一个参考点R(xr,yr,zr):";
cin>>xr>>yr>>zr;
cout<<"请给出投影平面的法线方向N(xn,yn,zn):";
cin>>xn>>yn>>zn;
cout<<"请输入一个常数d:";
cin>>d;
cout<<"请给定一个向量u(xu,yu,zu):";
cin>>xu>>yu>>zu;
//(x0,y0,z0)是点O在坐标系oxyz中的一个点
x0=xr+d*xn/sqrt(xn*xn+yn*yn+zn*zn);
y0=yr+d*yn/sqrt(xn*xn+yn*yn+zn*zn);
z0=zr+d*zn/sqrt(xn*xn+yn*yn+zn*zn);
a[2][0]=xn/sqrt(xn*xn+yn*yn+zn*zn);
a[2][1]=yn/sqrt(xn*xn+yn*yn+zn*zn);
a[2][2]=zn/sqrt(xn*xn+yn*yn+zn*zn);
b1=xu*zn-zu*xn;
b2=yu*zn-zu*yn;
b3=xu*yn-yu*xn;
a[0][0]=b1/sqrt(b1*b1+b2*b2+b3*b3);
a[0][1]=b2/sqrt(b1*b1+b2*b2+b3*b3);
a[0][2]=b3/sqrt(b1*b1+b2*b2+b3*b3);
a[1][0]=a[0][2]*a[2][1]-a[0][1]*a[2][2];
a[1][1]=a[0][0]*a[2][2]-a[0][2]*a[2][0];
a[1][2]=a[0][1]*a[2][0]-a[0][0]*a[2][1];
a[0][3]=-(a[0][0]*x0+a[0][1]*y0+a[0][2]*z0);
a[1][3]=-(a[1][1]*x0+a[1][2]*y0+a[1][3]*z0);
a[2][3]=-(a[2][2]*x0+a[1][2]*y0+a[1][3]*z0);
a[3][3]=-(a[3][3]*x0+a[2][3]*y0+a[2][3]*z0);
cout<<"于是坐标系变换矩阵为:"<<endl;
for(i=0;i<4;i++) //输出变换矩阵
{
for(j=0;j<4;j++)
{ cout<<setw(15)<<a[i][j]<<" ";
}
cout<<"\n";
}
b[0][0]=zr;
b[0][2]=-xr;
b[1][1]=zr;
b[1][2]=-yr;
b[2][2]=A;
b[2][3]=B;
b[3][2]=-1;
b[3][3]=zr;
cout<<"于是一点透视矩阵为:"<<endl;
for(i=0;i<4;i++) //输出一点透视矩阵
{
for(j=0;j<4;j++)
{ cout<<setw(15)<<b[i][j]<<" ";
}
cout<<"\n";
}
cout<<"最后需输出的矩阵为:"<<endl;
for(i=0;i<4;i++) //矩阵相乘
{
for(k=0;k<4;k++)
{
for(j=0;j<4;j++)
c[i][k]+=b[i][j]*a[j][k];
cout<<setw(15)<<c[i][k]<<" ";
}
cout<<"\n";
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
投影平面是任意平面的情况(一点透视)
共13个文件
pdb:2个
ilk:1个
obj:1个
需积分: 14 18 下载量 106 浏览量
2009-02-03
18:03:27
上传
评论
收藏 1.05MB RAR 举报
温馨提示
与大家分享下:投影平面是任意平面时的一点透视
资源推荐
资源详情
资源评论
收起资源包目录
.rar (13个子文件)
一点透视
任平面.dsp 3KB
任平面.ncb 41KB
任平面.opt 581KB
Debug
任平面.ilk 785KB
vc60.pdb 124KB
任平面.pdb 1.06MB
vc60.idb 89KB
任平面.obj 247KB
任平面.pch 1.92MB
任平面.exe 548KB
任平面.cpp 2KB
任平面.plg 1KB
任平面.dsw 537B
共 13 条
- 1
资源评论
goontoend
- 粉丝: 13
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功