Satudebol Forum Forum Index
Google
FAQFAQ SearchSearch UsergroupsUsergroups Setup Revenue SharingSetup Revenue Sharing View Your ProfileView Your Profile RegisterRegister  Not LoggedNot Logged  ProfileProfile  Contact AdminContact Admin  GamesGames  Log inLog in  
mGinger Pays You To Read SMS


Your Ad Here Your Ad Here
Your Ad Here Your Ad Here
Your Ad Here Your Ad Here
calculate its area and perimeter of convex polygon,  Digg!

 
Post new topic   Reply to topic    Satudebol Forum Forum Index -> C and C++
View previous topic :: View next topic  
Author Message
amit33086
Perfect


Joined: 08 Mar 2007
Posts: 328
Total Words: 41,810
Location: chandigarh
Magic Coins
Referral Stock
Bonus Coins
62 ATW Posts
ATW Referral
1618 Game Points

PostPosted: Sun May 13, 2007 3:31 pm    Post subject: calculate its area and perimeter of convex polygon, Digg! Reply with quote

/* Given the coordinates of the vertices of a convex polygon,
calculate its area and perimeter. Subdivide it into triangles
and calculate the area of each triangle with Heron's formula.
Requires data file pvert.txt containing coordinates of each vertex.
Example of data for a polygon with 5 vertices:

3 7 6 4 3 -2 -6 1 -6 7
*/
#include <stdio>
#include <stdlib>
#include <math>
#define MAX_VERT 50
enum {x, y};
typedef struct triangle {
double v1[2];
double v2[2];
double v3[2];
} triangle;
double area(triangle a);
double perimeter(double *vertices, int size);
double side(double *p1, double *p2);

int main(void)
{
int n, idx;
int triangles;
int index;
int xycount;
double xy;
double triangle_area;
double polygon_area;
double perim;
double polygon_vertices[MAX_VERT] = {0.0};
triangle a;
FILE *data;

xycount = 0;
polygon_area = 0;
if((data = fopen("pvert.txt", "r")) == NULL)
{
fprintf(stderr, "can't open data file
");
exit(EXIT_FAILURE);
}

/* Read x-y coordinates of the vertices
of the polygon from a file. */
while(fscanf(data, "%lf", &xy) == 1)
polygon_vertices[xycount++] = xy;
fclose(data);
idx = 0;
/* triangles in polygon = vertices - 2 */
triangles = (xycount / 2) - 2;
putchar('
');

for(index = 2, idx = 0; idx < triangles; index += 2, ++idx)
{
/* Load vertices of a triangle into struct.
1st vertex of the polygon will be the 1st
vertex of each triangle. index holds the
starting index of each consecutive set of
triangle vertices after the 1st. */
a.v1[x] = polygon_vertices[0];
a.v1[y] = polygon_vertices[1];
a.v2[x] = polygon_vertices[index+0];
a.v2[y] = polygon_vertices[index+1];
a.v3[x] = polygon_vertices[index+2];
a.v3[y] = polygon_vertices[index+3];

/* calculate the area of the triangle */
triangle_area = area(a);
printf("area of triangle = %.2f
", triangle_area);

/* add triangle area to polygon area */
polygon_area += triangle_area;
}
printf("
area of polygon = %.2f
", polygon_area);

/* calculate the perimeter of the polygon */
perim = perimeter(polygon_vertices, xycount);
printf("perimeter of polygon = %.2f
", perim);

return 0;
}

/* calculate triangle area with Heron's formula */
double area(triangle a)
{
double s1, s2, s3, S, area;

s1 = side(a.v1, a.v2);
s2 = side(a.v2, a.v3);
s3 = side(a.v3, a.v1);
S = (s1 + s2 + s3) / 2;
area = sqrt(S*(S - s1)*(S - s2)*(S - s3));

return area;
}

/* calculate polygon perimeter */
double perimeter(double *vertices, int size)
{
int idx, jdx;
double p1[2], p2[2], pfirst[2], plast[2];
double perimeter;

perimeter = 0.0;
/* 1st vertex of the polygon */
pfirst[x] = vertices[0];
pfirst[y] = vertices[1];
/* last vertex of polygon */
plast[x] = vertices[size-2];
plast[y] = vertices[size-1];
/* calculate perimeter minus last side */
for(idx = 0; idx <= size-3; idx += 2)
{
for(jdx = 0; jdx < 4; ++jdx)
{
p1[x] = vertices[idx];
p1[y] = vertices[idx+1];
p2[x] = vertices[idx+2];
p2[y] = vertices[idx+3];
}
perimeter += side(p1, p2);
}
/* add last side */
perimeter += side(plast, pfirst);

return perimeter;
}

/* calculate length of side */
double side(double *p1, double *p2)
{
double s1, s2, s3;

s1 = (p1[x] - p2[x]);
s2 = (p1[y] - p2[y]);
s3 = (s1 * s1) + (s2 * s2);

return sqrt(s3);
}
_________________
amit33086
five stars ®
[url=]www.ccetelectronics4u.blogspot.com[/url]
Admin
Computers don't make errors what they do they do on purpose...
Back to top
View user's profile Send private message Visit poster's website Yahoo Messenger
Display posts from previous:   


 Cool Sites
Limo & Chauffeur Cars Blog
Web Hosting Reviews
Credit Card Application
Camping Holidays Spain
Costa Blanca Property
Black and White Myspace Layouts
Gropter
iScrapbook
Florida Bass Fishing
South Florida Bass Lakes
Free Recipes
Buy Iraqi dinar
Small Business Blog
New Zealand
Bollywood Wallpapers Photo Gallery
Web Link Bids
Lunar Web Directory
Trade Show Displays
Non Binding Socks
Work at Home
Post new topic   Reply to topic    Satudebol Forum Forum Index -> C and C++ All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum

Mobile House
Email Fax



Powered by phpBB © 2001, 2005 phpBB Group
Protected by Anti-Spam ACP