codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
#include <conio.h> #include <stdio.h> #include <math.h> #include <stdlib.h> #define deltax(i,j) (mug[i].x-mug[j].x) #define deltay(i,j) (mug[i].y-mug[j].y) struct pt {int num;int x;int y;}; struct line {float k;float b;}; struct ptD3 {int numD1;int numD2;int x;int y;float r;}; int inorout(struct pt *,struct pt *,struct pt *);//Zapolnenie D2 void enterarr(struct pt *);//Zapolnenie D1 struct line getline(int x1, int y1, int x2, int y2); int distance(struct pt *,struct pt *,int ,float ,struct ptD3 *);//zapolnenie D3 void PasteSort(int ,struct ptD3 *); void swap(struct ptD3 *, int i, int j); float perimeter_calculation(struct pt *); float area_calculation(struct pt *); int main() { int i,sizeD1,sizeD2,sizeD3; float R=7.2,perimeter,area; struct pt mug[4]={1,1,1 , 2,15,1 , 3,10,8 , 4,2,14},line[2]={5,-1,-1 , 6,8,15},D1[20],*D2; struct ptD3 *D3; sizeD2=0; sizeD3=0; printf("Vvedite koordinati tochek parami cherez probel.\nroordinati tochki v promezhutke 0<=x<=20 & 0<=y<=20\n"); enterarr(D1); D2=(struct pt*)malloc(sizeof(struct pt)*5); sizeD2=inorout(D1,D2,mug); for(i=0;i<sizeD2;i++) { printf("%d %d %d\n",D2[i].num,D2[i].x,D2[i].y) ; } D3=(struct ptD3*)malloc(sizeof(struct ptD3)*5); sizeD3=distance(line,D2,sizeD2,R,D3); for(i=0;i<sizeD3;i++) { printf("D3 UNSORTED %d %d %d %d %f\n",D3[i].numD1,D3[i].numD2,D3[i].x,D3[i].y,D3[i].r) ; } PasteSort(sizeD3,D3); for(i=0;i<sizeD3;i++) { printf("d3 SORTED %d %d %d %d %f\n",D3[i].numD1,D3[i].numD2,D3[i].x,D3[i].y,D3[i].r) ; } perimeter=perimeter_calculation(mug); area=area_calculation(mug); printf("perimeter = %f\n",perimeter); printf("area = %f\n",area); free(D2); free(D3); getch(); return 0; } void enterarr(struct pt *arr) { int i; for(i=0;i<20;i++) { arr[i].num=i+1; printf("Enter x and y of point N%d\t",arr[i].num); scanf("%d %d",&(arr[i]).x,&(arr[i]).y); if(((arr[i]).x < 0 || (arr[i]).x > 20) || ((arr[i]).y < 0 || (arr[i]).y > 20)) { i--; printf("\tERROR: 0<=x<=20 & 0<=y<=20. REPEAT\n"); } printf("\n"); } } int inorout(struct pt *arr1,struct pt *arr2,struct pt *mug)//arr1=D1, arr2=D2, mug=mug { int i,j,size; float ynn,ynv,ynl,ynp; struct line mug_lines[4]; size=0; mug_lines[0]=getline(mug[0].x,mug[0].y,mug[1].x,mug[1].y);//AB mug_lines[1]=getline(mug[1].x,mug[1].y,mug[2].x,mug[2].y);//BC mug_lines[2]=getline(mug[2].x,mug[2].y,mug[3].x,mug[3].y);//CD mug_lines[3]=getline(mug[3].x,mug[3].y,mug[0].x,mug[0].y);//DA /*printf("%f %f\n",mug_lines[0].k,mug_lines[0].b); printf("%f %f\n",mug_lines[1].k,mug_lines[1].b); printf("%f %f\n",mug_lines[2].k,mug_lines[2].b); printf("%f %f\n",mug_lines[3].k,mug_lines[3].b);*/ for(i=0;i<20;i++) { //printf("arr1[i] %f\n",(float)arr1[i].x); ynn=mug_lines[0].k*(float)arr1[i].x+mug_lines[0].b; ynv=mug_lines[2].k*(float)arr1[i].x+mug_lines[2].b; ynl=((float)arr1[i].y-mug_lines[3].b)/mug_lines[3].k; ynp=((float)arr1[i].y-mug_lines[1].b)/mug_lines[1].k; //printf("ynn%f ynv%f ynl%f ynp%f\narr[i].y %f \tarr[i].y %f\n",ynn,ynv,ynl,ynp,(float)arr1[i].y,(float)arr1[i].x); if (ynn<=((float)arr1[i].y) && ynv>=((float)arr1[i].y) && ynl<=((float)arr1[i].x) && ynp>=((float)arr1[i].x)) { arr2[size].num=arr1[i].num; arr2[size].x=arr1[i].x; arr2[size].y=arr1[i].y; size++; if (size%5==0) arr2=(struct pt *)realloc(arr2,sizeof(struct pt)*(size+5)); } } return size; } struct line getline(int x1, int y1, int x2, int y2) { float delta_y,delta_x; struct line temp; delta_x=x1-x2; delta_y=y1-y2; //printf("x1 %d x2 %d y1 %d y2 %d\n",x1,x2,y1,y2); //printf("x - %f y - %f\n",delta_x,delta_y); temp.k=delta_y/delta_x; temp.b=y1-x1*temp.k; //printf("k - %f b - %f\n\n",temp.k,temp.b); return temp; } int distance(struct pt *line,struct pt *D2,int sizeD2,float R,struct ptD3 *D3) { int size,i; struct line main_line,normal_line; float x0,y0,r; size=0; main_line=getline(line[1].x,line[1].y,line[0].x,line[0].y); //printf("k=%f b=%f",main_line.k,main_line.b); normal_line.k=-1/main_line.k; for(i=0;i<sizeD2;i++) { normal_line.b=D2[i].y-normal_line.k*D2[i].y; x0=(normal_line.b-main_line.b)/(main_line.k-normal_line.k); y0=(x0*(main_line.k+normal_line.k)+main_line.b+normal_line.b)/2; r=sqrt((x0-D2[i].x)*(x0-D2[i].x)+(y0-D2[i].y)*(y0-D2[i].y)); printf("x0=%f y0=%f r=%f\n",x0,y0,r); if (r<=R) { D3[size].numD1=D2[i].num; D3[size].numD2=i; D3[size].x=D2[i].x; D3[size].y=D2[i].y; D3[size].r=r; size++; if (size%5==0) D3=(struct ptD3 *)realloc(D3,sizeof(struct ptD3)*(size+5)); } } return size; } void PasteSort(int size, struct ptD3 *D3)//swap(D3,i-1,i); { int i,j; i = 1; j = 2; while(i < size) { if (D3[i - 1].r <= D3[i].r) { i = j; j++; } else { swap(D3,i - 1,i); i--; if (i == 0) { i = j; j++; } } } } void swap(struct ptD3 *arr, int i, int j) { struct ptD3 temp; //printf("%f %f\n",arr[i].r,arr[j].r); temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; //printf("%f %f\n\n",arr[i].r,arr[j].r); } float perimeter_calculation(struct pt *mug) { int i; float result; result=0; for(i = 0;i < 4;i++) { result+=sqrt(deltax((i+1)%4,i)*deltax((i+1)%4,i)+deltay((i+1)%4,i)*deltay((i+1)%4,i)); } return result; } float area_calculation(struct pt *mug) { int i; float S1,S2,AB,AC,AD,BC,CD,P1,P2; AB=sqrt(deltax(0,1)*deltax(0,1)+deltay(0,1)*deltay(0,1)); AC=sqrt(deltax(0,2)*deltax(0,2)+deltay(0,2)*deltay(0,2)); AD=sqrt(deltax(0,3)*deltax(0,3)+deltay(0,3)*deltay(0,3)); BC=sqrt(deltax(2,1)*deltax(2,1)+deltay(2,1)*deltay(2,1)); CD=sqrt(deltax(3,2)*deltax(3,2)+deltay(3,2)*deltay(3,2)); P1=(AB+BC+AC)/2.; P2=(AC+CD+AD)/2.; S1=sqrt(P1*(P1-AB)*(P1-BC)*(P1-AC));//Formula Gerona S2=sqrt(P2*(P2-AC)*(P2-CD)*(P2-AD)); //printf("AB %f ac %f AD %f BC %f Cd %f\n",AB,AC,AD,BC,CD); //printf("P1=%f P2=%f\nS1 %f S2 %f \n",P1,P2,S1,S2); return S1+S2; }
Private
[
?
]
Run code
Submit