| Current Path : /var/www/html/venkat/check3/file/cg2013/pawan/ |
| Current File : /var/www/html/venkat/check3/file/cg2013/pawan/rit2013009_1.c |
#include <stdio.h>
#include<math.h>
int d;
double l[15][6];
double eye[3];
double laV[3];
double upV[3];
double lV[3],rV[3],uV[3];
double lCap[3],rCap[3],uCap[3];
double Mat[4][4];
double Coord[19][6];
double mul[4][1];
double pres[19][6];
void Multiply(int n1,int n2,int n3,int i1,int i2){
double a[n1][n3];
int i,j,k;
for(i=0;i<n1;i++)
{
for(j=0;j<n3;j++)
a[i][j]=0;
}
for(i = 0; i < n1; i++){
for(j = 0; j < n3; j++){
for(k = 0; k < n2; k++){
a[i][j]=a[i][j]+Mat[i][k]*mul[k][j];
}
}
}
for(i = 0;i<3;i++)
Coord[i1][i+i2]=a[i][0];
}
void Camera(){
int i,j;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
Mat[i][j]=0;
}
i=0;
while(i<3)
{
Mat[0][i] = rCap[i];
Mat[1][i] = uCap[i];
Mat[2][i] = (-1)*lCap[i];
Mat[0][3]=Mat[0][3]+(-1)*(rCap[i]*eye[i]);
Mat[1][3]=Mat[1][3]+(-1)*(uCap[i]*eye[i]);
Mat[2][3]=Mat[2][3]+lCap[i]*eye[i];
i++;
}
Mat[3][3]=1;
}
void compute(){
int i;
for(i=0;i<3;i++){
lV[i] = laV[i]-eye[i];
}
double ld= sqrt(lV[0]*lV[0]+lV[1]*lV[1]+lV[2]*lV[2]);
if(ld>0)
{
lCap[0]=lV[0]/ld;
lCap[1]=lV[1]/ld;
lCap[2]=lV[2]/ld;
}
else
{
lCap[0]=lV[0];
lCap[1]=lV[1];
lCap[2]=lV[2];
}
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];
ld=sqrt(rV[0]*rV[0]+rV[1]*rV[1]+rV[2]*rV[2]);
if(ld>0)
{
rCap[0]=rV[0]/ld;
rCap[1]=rV[1]/ld;
rCap[2]=rV[2]/ld;
}
else
{
rCap[0]=rV[0];
rCap[1]=rV[1];
rCap[2]=rV[2];
}
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];
ld=sqrt(uV[0]*uV[0]+uV[1]*uV[1]+uV[2]*uV[2]);
if(ld>0)
{
uCap[0]=uV[0]/ld;
uCap[1]=uV[1]/ld;
uCap[2]=uV[2]/ld;
}
else
{
uCap[0]=uV[0];
uCap[1]=uV[1];
uCap[2]=uV[2];
}
Camera();
}
int main()
{
int i,j;
double div;
eye[0]=0;
eye[1]=-100;
eye[2]=10;
laV[0]=0;
laV[1]=0;
laV[2]=0;
upV[0]=0;
upV[1]=0;
upV[2]=10;
d=10;
l[1][0]=-100;
l[1][1]=700;
l[1][2]=0;
l[1][3]=-100;
l[1][4]=500;
l[1][5]=0;
l[2][0]=-100;
l[2][1]=500;
l[2][2]=0;
l[2][3]=100;
l[2][4]=500;
l[2][5]=0;
l[3][0]=100;
l[3][1]=500;
l[3][2]=0;
l[3][3]=100;
l[3][4]=700;
l[3][5]=0;
l[4][0]=100;
l[4][1]=700;
l[4][2]=0;
l[4][3]=-100;
l[4][4]=700;
l[4][5]=0;
l[5][0]=-50;
l[5][1]=0;
l[5][2]=0;
l[5][3]=-50;
l[5][4]=500;
l[5][5]=0;
l[6][0]=-150;
l[6][1]=0;
l[6][2]=0;
l[6][3]=-500;
l[6][4]=400;
l[6][5]=0;
l[7][0]=-500;
l[7][1]=400;
l[7][2]=0;
l[7][3]=-100;
l[7][4]=700;
l[7][5]=0;
l[8][0]=-50;
l[8][1]=0;
l[8][2]=0;
l[8][3]=-400;
l[8][4]=400;
l[8][5]=0;
l[9][0]=-400;
l[9][1]=400;
l[9][2]=0;
l[9][3]=-100;
l[9][4]=600;
l[9][5]=0;
l[10][0]=50;
l[10][1]=0;
l[10][2]=0;
l[10][3]=50;
l[10][4]=500;
l[10][5]=0;
l[11][0]=150;
l[11][1]=0;
l[11][2]=0;
l[11][3]=500;
l[11][4]=400;
l[11][5]=0;
l[12][0]=500;
l[12][1]=400;
l[12][2]=0;
l[12][3]=100;
l[12][4]=700;
l[12][5]=0;
l[13][0]=50;
l[13][1]=0;
l[13][2]=0;
l[13][3]=400;
l[13][4]=400;
l[13][5]=0;
l[14][0]=400;
l[14][1]=400;
l[14][2]=0;
l[14][3]=100;
l[14][4]=600;
l[14][5]=0;
compute();
for(i = 1;i <= 14;i++){
mul[0][0] = l[i][0];
mul[1][0] = l[i][1];
mul[2][0] = l[i][2];
mul[3][0] = 1;
Multiply(4,4,1,i,0);
mul[0][0] = l[i][3];
mul[1][0] = l[i][4];
mul[2][0] = l[i][5];
Multiply(4,4,1,i,3);
}
for(i=1;i<=14;i++){
div = Coord[i][2]/(1.0*d);
for(j = 0;j<3;j++){
pres[i][j]=Coord[i][j]/div;
}
div = Coord[i][5]/(d*1.0);
for(j = 3;j<6;j++){
pres[i][j] =Coord[i][j]/div;
}
}
for(i=1;i<=2;i++){
printf("%d,%d,%d\n",(int)(pres[i][0]+0.5),(int)(pres[i][1]+0.5),(int)(pres[i][2]+0.5));
}
for(i=4;i>=3;i--){
printf("%d,%d,%d\n",(int)(pres[i][0]+0.5),(int)(pres[i][1]+0.5),(int)(pres[i][2]+0.5));
}
for(i=5;i<=14;i++){
printf("%d,%d,%d\n",(int)(pres[i][0]+0.5),(int)(pres[i][1]+0.5),(int)(pres[i][2]+0.5));
printf("%d,%d,%d\n",(int)(pres[i][3]+0.5),(int)(pres[i][4]+0.5),(int)(pres[i][5]+0.5));
}
return 0;
}