Your IP : 216.73.216.40


Current Path : /var/www/html/venkat/check3/file/cg2013/pawan/
Upload File :
Current File : /var/www/html/venkat/check3/file/cg2013/pawan/rit2013017_1.cpp

#include <stdio.h>
#include<math.h>
#include<string.h>
//declaration of matrices
double line[20][6],e[3],look[3],upV[3],d;
double lV[3],rV[3],uV[3];
double lCap[3],rCap[3],uCap[3];
double camera_mat[4][4];
double camera_coord[19][6];
double mul[4][1];
double perspective[19][6];
//multiplying two matrices
void MatMul(int n1,int n2,int n3,int index1,int index2){
	double ans[n1][n3];
	memset(ans,0,sizeof(ans));
	for(int i = 0; i < n1; i++){
		for(int j = 0; j < n3; j++){
			for(int k = 0; k < n2; k++){
				ans[i][j] += camera_mat[i][k]*mul[k][j];
			}
		}
	}
	for(int i = 0;i<3;i++)
		camera_coord[index1][i+index2] = ans[i][0];
}

int main()
{
	//Input given for eye,lookat,upV,d,and lines
	e[0]=0;
	e[1]=-100;
	e[2]=10;
	look[0]=0;
	look[1]=0;
	look[2]=0;
	upV[0]=0;
	upV[1]=0;
	upV[2]=10;
	d=10;
	line[1][0]=-100;
	line[1][1]=700;
	line[1][2]=0;
	line[1][3]=-100;
	line[1][4]=500;
	line[1][5]=0;
	line[2][0]=-100;
	line[2][1]=500;
	line[2][2]=0;
	line[2][3]=100;
	line[2][4]=500;
	line[2][5]=0;
	line[3][0]=100;
	line[3][1]=500;
	line[3][2]=0;
	line[3][3]=100;
	line[3][4]=700;
	line[3][5]=0;
	line[4][0]=100;
	line[4][1]=700;
	line[4][2]=0;
	line[4][3]=-100;
	line[4][4]=700;
	line[4][5]=0;
	line[5][0]=-50;
	line[5][1]=0;
	line[5][2]=0;
	line[5][3]=-50;
	line[5][4]=500;
	line[5][5]=0;
	line[6][0]=-150;
	line[6][1]=0;
	line[6][2]=0;
	line[6][3]=-500;
	line[6][4]=400;
	line[6][5]=0;
	line[7][0]=-500;
	line[7][1]=400;
	line[7][2]=0;
	line[7][3]=-100;
	line[7][4]=700;
	line[7][5]=0;
	line[8][0]=-50;
	line[8][1]=0;
	line[8][2]=0;
	line[8][3]=-400;
	line[8][4]=400;
	line[8][5]=0;
	line[9][0]=-400;
	line[9][1]=400;
	line[9][2]=0;
	line[9][3]=-100;
	line[9][4]=600;
	line[9][5]=0;
	line[10][0]=50;
	line[10][1]=0;
	line[10][2]=0;
	line[10][3]=50;
	line[10][4]=500;
	line[10][5]=0;
	line[11][0]=150;
	line[11][1]=0;
	line[11][2]=0;
	line[11][3]=500;
	line[11][4]=400;
	line[11][5]=0;
	line[12][0]=500;
	line[12][1]=400;
	line[12][2]=0;
	line[12][3]=100;
	line[12][4]=700;
	line[12][5]=0;
	line[13][0]=50;
	line[13][1]=0;
	line[13][2]=0;
	line[13][3]=400;
	line[13][4]=400;
	line[13][5]=0;
	line[14][0]=400;
	line[14][1]=400;
	line[14][2]=0;
	line[14][3]=100;
	line[14][4]=600;
	line[14][5]=0;
	//Computing the lV,rV,uV,lcap,rcap,ucap
	for(int i=0;i<3;i++){
		lV[i] = look[i]-e[i];
	}
	double lmod = sqrt(lV[0]*lV[0]+lV[1]*lV[1]+lV[2]*lV[2]);
	for(int i=0;i<3;i++){
		lCap[i] = lmod>0?lV[i]/lmod:lV[i];
	}
	rV[0] = lV[1]*upV[2]-lV[2]*upV[1];
	rV[1] = lV[2]*upV[0]-lV[0]*upV[2];
	rV[2] = lV[0]*upV[1]-lV[1]*upV[0];
	
	double rmod = sqrt(rV[0]*rV[0]+rV[1]*rV[1]+rV[2]*rV[2]);
	for(int i=0;i<3;i++){
		rCap[i] = rmod>0?rV[i]/rmod:rV[i];
	}
	
	uV[0] = rV[1]*lV[2]-rV[2]*lV[1];
	uV[1] = rV[2]*lV[0]-rV[0]*lV[2];
	uV[2] = rV[0]*lV[1]-rV[1]*lV[0];
	
	double umod = sqrt(uV[0]*uV[0]+uV[1]*uV[1]+uV[2]*uV[2]);
	int i=0;
	while(i<3){
		uCap[i] = umod>0?uV[i]/umod:uV[i];
		i++;
	}
	//calculating camera matrix
	memset(camera_mat,0,sizeof(camera_mat));
	
	for(int i=0;i<3;i++)
		camera_mat[0][i] = rCap[i];
	
	for(int i=0;i<3;i++)
		camera_mat[1][i] = uCap[i];
	
	for(int i=0;i<3;i++)
		camera_mat[2][i] = (-1)*lCap[i];
	
	for(int i = 0;i<3;i++)
		camera_mat[0][3] += (-1)*(rCap[i]*e[i]);
	
	for(int i = 0;i<3;i++)
		camera_mat[1][3] += (-1)*(uCap[i]*e[i]);
	
	for(int i = 0;i<3;i++)
		camera_mat[2][3] += lCap[i]*e[i];
	
	camera_mat[3][3] = 1;
	
	for(int i = 1;i <= 14;i++){
		mul[0][0] = line[i][0];mul[1][0] = line[i][1];mul[2][0] = line[i][2];
		mul[3][0] = 1;
		MatMul(4,4,1,i,0);
		mul[0][0] = line[i][3];mul[1][0] = line[i][4];mul[2][0] = line[i][5];
		MatMul(4,4,1,i,3);
	}
	//performing perspective projection
		double _div;
	for(int i=1;i<=14;i++){
		_div = camera_coord[i][2]/d;
		for(int j = 0;j<3;j++){
			perspective[i][j] = camera_coord[i][j]/_div;
		}
		_div = camera_coord[i][5]/d;
		for(int j = 3;j<6;j++){
			perspective[i][j] = camera_coord[i][j]/_div;
		}
	}

	for(int i = 1; i < 3; ++i) {
		printf("%d,%d,%d\n",(int)(perspective[i][0]+0.5),(int)(perspective[i][1]+0.5),(int)(perspective[i][2]+0.5));
	}
	
	for(int i = 4; i>=3; i--) {
		printf("%d,%d,%d\n",(int)(perspective[i][0]+0.5),(int)(perspective[i][1]+0.5),(int)(perspective[i][2]+0.5));
	}
	
	for(int i=5;i<=14;i++){
			printf("%d,%d,%d\n",(int)(perspective[i][0]+0.5),(int)(perspective[i][1]+0.5),(int)(perspective[i][2]+0.5));
			printf("%d,%d,%d\n",(int)(perspective[i][3]+0.5),(int)(perspective[i][4]+0.5),(int)(perspective[i][25]+0.5));
		}
}