📄 cjp.cpp
字号:
#include "stdafx.h"
#include "math.h"
#include<iostream.h>
#include "graphicView.h"
#include "graphicDoc.h"
#include "graphic.h"
#if !defined(all_of_myfunction_in_cjp)
#define all_of_myfunction_in_cjp
#define PI 3.1415926
typedef struct dcpt3 { int x,y,z; } dcpt3;
dcpt3 U={0,1,0}; //默认以yoz坐标面为观察面
dcpt3 V={0,0,1};
dcpt3 N={1,0,0};
dcpt3 *vw;//,*temp3;
typedef struct ZPoint { int z;double r; CPoint *pxy; } ZP;
ZP *zp;
double Rvw;
int dengfen=12;
CString text;
CPoint *ps,*pn,*qs,*qn;
///////////////////////////////////////////////////////
//建立模型坐标
bool jianmo(CPoint CenterPoint,int R){
int i,j;
const int m=dengfen/4;
double th=2.00*PI/dengfen;
zp=new ZP[m+1];
if(!zp) {
text="zp内存分配失败!";
AfxMessageBox(text,MB_OK,0);
return false;
}//if false
for(i=0;i<m;i++){
zp[i].r=R*cos((double)i*th);
zp[i].z=int(R*sin((double)i*th));
zp[i].pxy=new CPoint[dengfen+1];
if(!zp[i].pxy) return false;
for(j=0;j<dengfen;j++){
zp[i].pxy[j].x=long(zp[i].r*cos(double(j*th)));
zp[i].pxy[j].y=long(zp[i].r*sin(double(j*th)));
}//for..
zp[i].pxy[dengfen].x=zp[i].pxy[0].x;
zp[i].pxy[dengfen].y=zp[i].pxy[0].y;
}//for
zp[m].pxy=new CPoint;
if(!zp[m].pxy) return false;
zp[m].pxy->x=0;
zp[m].pxy->y=0;
return true;
}//jianmo
/**/
//////////////////////////////////////////////////////
//设置观察坐标系
bool setUVN(dcpt3 wordpoint,dcpt3 viewpoint){
if((wordpoint.x=viewpoint.x)&&(wordpoint.y=viewpoint.y)&&(wordpoint.z=viewpoint.z)) return true;
vw=new dcpt3;
if(!vw)return false;
double r;
vw->x=viewpoint.x-wordpoint.x;
vw->y=viewpoint.y-wordpoint.y;
vw->z=viewpoint.z-wordpoint.z;
Rvw=sqrt((vw->x*vw->x)+(vw->y*vw->y)+(vw->z*vw->z));
N.x=int(-(vw->x)/Rvw); N.y=int(-(vw->y)/Rvw); N.z=int(-(vw->z)/Rvw);
r=sqrt((vw->y*vw->y)+(vw->z*vw->z))/Rvw;
U.x=0; U.y=int(-N.z/r); U.z=int(N.y/r);
V.x=N.y*U.z-N.z*U.y;
V.y=N.z*U.x-N.x*U.z;
V.z=N.x*U.y-N.y*U.x;
return true;
}//setUVN()
//////////////////////////////////////////////////////
//从世界坐标系转变为视图坐标系
/*
void w_v(dcpt3 p3d,dcpt3 &pot){
pot.x=p3d.x+vw->x;
pot.y=p3d.y+vw->y;
pot.z=p3d.z+vw->z;
}//wordview()
/**/
bool CGraphicView::sphereview(){
if(!zp) return false;
int i,j,m=dengfen/4;
for(i=1;i<m;i++){
qs=zp[i-1].pxy; qn=qs+1;
ps=zp[i].pxy;
for(j=0;j<=dengfen;j++){
lineany((U.x*ps->x+U.y*ps->y),(V.x*ps->x+V.y*ps->y),(U.x*qs->x+U.y*qs->y),(V.x*qs->x+V.y*qs->y));
lineany((U.x*qs->x+U.y*qs->y),(V.x*qs->x+V.y*qs->y),(U.x*qn->x+U.y*qn->y),(V.x*qn->x+V.y*qn->y));
}//for
}//for
return true;
}//sphereview()
/**/
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -