| Current Path : /var/www/html/venkat/check3/file/cg2013/pawan/ |
| 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");
}
}