⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cjp.cpp

📁 计算机图形学课程设计源码 这是大二的时候学计算机图形学时做的课程设计
💻 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 + -