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/RIT2013013_1.cpp

#include <bits/stdc++.h>
using namespace std;

double segment[19][6];
double noticer[3];
double lukat[3];
double up_Vector[3];
double zmin,d;
double screen[6];
double left_vector[3],right_vector[3],u_vector[3];
double left1[3],right1[3],up[3];
double digicam[4][4];
double CamCuddy[19][6];
double moodi[4][1];
double prespective[19][6];

void calculate(){
	for(int i=0;i<3;i++){
		left_vector[i] = lukat[i]-noticer[i];
	}
	double lord = sqrt(left_vector[0] * left_vector[0] + left_vector[1] * left_vector[1] + left_vector[2] * left_vector[2]);
	for(int i=0;i<3;i++){
		left1[i] = lord > 0 ? left_vector[i] / lord:left_vector[i];
	}
	right_vector[0] = left_vector[1] * up_Vector[2] - left_vector[2] * up_Vector[1];
	right_vector[1] = left_vector[2] * up_Vector[0] - left_vector[0] * up_Vector[2];
	right_vector[2] = left_vector[0] * up_Vector[1] - left_vector[1] * up_Vector[0];

	double rord = sqrt(right_vector[0] * right_vector[0] + right_vector[1] * right_vector[1] + right_vector[2] * right_vector[2]);
	for(int i=0;i<3;i++){
		right1[i] = rord > 0 ? right_vector[i] / rord : right_vector[i];
	}

	u_vector[0] = right_vector[1] * left_vector[2] - right_vector[2] * left_vector[1];
	u_vector[1] = right_vector[2] * left_vector[0] - right_vector[0] * left_vector[2];
	u_vector[2] = right_vector[0] * left_vector[1] - right_vector[1] * left_vector[0];

	double uord = sqrt(u_vector[0] * u_vector[0] + u_vector[1] * u_vector[1]+u_vector[2]*u_vector[2]);
	for(int i=0;i<3;i++){
		up[i] = uord > 0 ? u_vector[i] / uord : u_vector[i];
	}
}

void Makedigicam(){

	for (int i = 0; i < 4; i++) {
        for (int j = 0; j < 4; j++) {
            digicam[i][j] = 0;
        }
	}
	for(int i=0;i<3;i++) {
		digicam[0][i] = right1[i];
	}

	for(int i=0;i<3;i++) {
		digicam[1][i] = up[i];
	}

	for(int i=0;i<3;i++) {
		digicam[2][i] = (-1)*left1[i];
	}

	for(int i = 0;i<3;i++) {
		digicam[0][3] += (-1) * (right1[i]*noticer[i]);
	}

	for(int i = 0;i<3;i++) {
		digicam[1][3] += (-1) * (up[i]*noticer[i]);
	}

	for(int i = 0;i<3;i++) {
		digicam[2][3] += left1[i] * noticer[i];
	}

	digicam[3][3] = 1;
}

void multiply_matrices(int n1,int n2,int n3,int lok1,int lok2){
	double answer_matrix[n1][n3];

    for (int i = 0; i < n1; i++) {
        for (int j = 0; j < n3; j++) {
            answer_matrix[i][j] = 0;
        }
	}

	for(int i = 0; i < n1; i++){
		for(int j = 0; j < n3; j++){
			for(int k = 0; k < n2; k++){
				answer_matrix[i][j] += digicam[i][k]* moodi[k][j];
			}
		}
	}

	for(int i = 0;i<3;i++) {
		CamCuddy[lok1][i+lok2] = answer_matrix[i][0];
    }
}
void CalculateCuddy(){
	for(int i = 1; i <= 14; i++) {
		moodi[0][0] = segment[i][0];
		moodi[1][0] = segment[i][1];
		moodi[2][0] = segment[i][2];
		moodi[3][0] = 1;
		multiply_matrices(4,4,1,i,0);
		moodi[0][0] = segment[i][3];
		moodi[1][0] = segment[i][4];
		moodi[2][0] = segment[i][5];
		multiply_matrices(4,4,1,i,3);
	}
}

void ComputePrespectiveProjection(){
	double div;

	for(int i=1;i<=14;i++){
		div = CamCuddy[i][2]/d;
		for(int j = 0;j<3;j++){
			prespective[i][j] = CamCuddy[i][j]/div;
		}
		div = CamCuddy[i][5]/d;
		for(int j = 3;j<6;j++){
			prespective[i][j] = CamCuddy[i][j]/div;
		}
	}

}

int main()
{
	int i,j;

	segment[1][0]=-100;
	segment[1][1]=700;
	segment[1][2]=0;
	segment[1][3]=-100;
	segment[1][4]=500;
	segment[1][5]=0;
	segment[2][0]=-100;
	segment[2][1]=500;
	segment[2][2]=0;
	segment[2][3]=100;
	segment[2][4]=500;
	segment[2][5]=0;
	segment[3][0]=100;
	segment[3][1]=500;
	segment[3][2]=0;
	segment[3][3]=100;
	segment[3][4]=700;
	segment[3][5]=0;
	segment[4][0]=100;
	segment[4][1]=700;
	segment[4][2]=0;
	segment[4][3]=-100;
	segment[4][4]=700;
	segment[4][5]=0;
	segment[5][0]=-50;
	segment[5][1]=0;
	segment[5][2]=0;
	segment[5][3]=-50;
	segment[5][4]=500;
	segment[5][5]=0;
	segment[6][0]=-150;
	segment[6][1]=0;
	segment[6][2]=0;
	segment[6][3]=-500;
	segment[6][4]=400;
	segment[6][5]=0;
	segment[7][0]=-500;
	segment[7][1]=400;
	segment[7][2]=0;
	segment[7][3]=-100;
	segment[7][4]=700;
	segment[7][5]=0;
	segment[8][0]=-50;
	segment[8][1]=0;
	segment[8][2]=0;
	segment[8][3]=-400;
	segment[8][4]=400;
	segment[8][5]=0;
	segment[9][0]=-400;
	segment[9][1]=400;
	segment[9][2]=0;
	segment[9][3]=-100;
	segment[9][4]=600;
	segment[9][5]=0;
	segment[10][0]=50;
	segment[10][1]=0;
	segment[10][2]=0;
	segment[10][3]=50;
	segment[10][4]=500;
	segment[10][5]=0;
	segment[11][0]=150;
	segment[11][1]=0;
	segment[11][2]=0;
	segment[11][3]=500;
	segment[11][4]=400;
	segment[11][5]=0;
	segment[12][0]=500;
	segment[12][1]=400;
	segment[12][2]=0;
	segment[12][3]=100;
	segment[12][4]=700;
	segment[12][5]=0;
	segment[13][0]=50;
	segment[13][1]=0;
	segment[13][2]=0;
	segment[13][3]=400;
	segment[13][4]=400;
	segment[13][5]=0;
	segment[14][0]=400;
	segment[14][1]=400;
	segment[14][2]=0;
	segment[14][3]=100;
	segment[14][4]=600;
	segment[14][5]=0;

	noticer[0] = 0;
	noticer[1] = -100;
	noticer[2] = 10;
	

	lukat[0]=0;
	lukat[1]=0;
	lukat[2]=0;

	up_Vector[0]=0;
	up_Vector[1]=0;
	up_Vector[2]=10;
	


	d = 10;

	//init();
	calculate();
	Makedigicam();
	CalculateCuddy();
	ComputePrespectiveProjection();
	
	printf("%d, ",(int)(prespective[1][0]+0.5));
	printf("%d, ",(int)(prespective[1][1]+0.5));
	printf("%d\n",(int)(prespective[1][2]+0.5));
	printf("%d, ",(int)(prespective[1][3]+0.5));
	printf("%d, ",(int)(prespective[1][4]+0.5));
	printf("%d\n",(int)(prespective[1][5]+0.5));
	printf("%d, ",(int)(prespective[3][3]+0.5));
	printf("%d, ",(int)(prespective[3][4]+0.5));
	printf("%d\n",(int)(prespective[3][5]+0.5));
	printf("%d, ",(int)(prespective[3][0]+0.5));
	printf("%d, ",(int)(prespective[3][1]+0.5));
	printf("%d\n",(int)(prespective[3][2]+0.5));
	for(int i=5;i<=14;i++){
		for(int j = 0;j<3;j++){
			if(j==2)
			printf("%d\n",(int)(prespective[i][j]+0.5));
			else
			printf("%d, ",(int)(prespective[i][j]+0.5));
		}
		//printf("\n");
		for(int j = 3;j<6;j++){
			if(j==5)
			printf("%d\n",(int)(prespective[i][j]+0.5));
			else
			printf("%d, ",(int)(prespective[i][j]+0.5));
		}
		//printf("\n");
	}
}