954,479 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

Polygon formula [for graphics]

Hello everybody, i need a polygon formula to draw one. I want to make a function that will draw a polygon , depending on how many vertex's it has. I'm not good at math so i can't figure it out how to do it. Though, i do understand that it should look something like: pass=360/vertex , then calculate some end points of lines that are 'pass' degrees from each other; but i don't know how to do that.
Can someone help?Pls!

Alex_
Junior Poster
175 posts since Jun 2008
Reputation Points: 10
Solved Threads: 3
 

If my math is correct,

x(n) = x + r*cos(a + n*pass)
y(n) = y + r*sin(a + n*pass)

where 0 <= n < vertex , x and y is the center point, a is the angle of the first point to the right of the center point from the horizontal(counter-clockwise) and r is the distance from the center point to each of the vertices(the "radius"). Let me know if this is what you were looking for.

nmaillet
Posting Whiz in Training
232 posts since Aug 2008
Reputation Points: 69
Solved Threads: 53
 

Also note that you have to use radians (not degrees) for your angles, so pass = 2 * M_PI / vertex (M_PI is in math.h) .

nucleon
Posting Pro in Training
478 posts since Oct 2008
Reputation Points: 163
Solved Threads: 91
 

Sort of ! But not really..
This is what i wrote

void polygon(int x, int y, int n, int r){
int k=0, *poly;
double pass= 360/n, _n=0,pass2=n*pass;
poly=new int[n];
	while(k<n*2){
   	     poly[k++]=x +r * cos(pass2);
	     poly[k++]=y +r * sin(pass2);
	     pass2+=pass;
	}
	drawpoly(n,poly);
}

as i understood , a is a=a+a; at each iteration? If it is so, it is not really what i expected, though it's better than nothing. Thx!
This is the output,at:
[img]http://sites.google.com/site/alexzaim/_/rsrc/1234900573771/Home/temp.jpg[/img]

Alex_
Junior Poster
175 posts since Jun 2008
Reputation Points: 10
Solved Threads: 3
 

tried some modifications

void polygon(int x, int y, int n, int r){
int k=0, *poly;
double pass= 2* M_PI/n,pass2=n*pass, a=360/n;
poly=new int[n];
	while(k<n*2){
	pass2+=a;
	poly[k++]=x +r * cos(pass2);
	poly[k++]=y +r * sin(pass2);
	}
	drawpoly(n,poly);
}

check:
[IMG]http://sites.google.com/site/alexzaim/_/rsrc/1234900573771/Home/temp2.jpg[/IMG]

Alex_
Junior Poster
175 posts since Jun 2008
Reputation Points: 10
Solved Threads: 3
 

a is constant, but n*pass changes because n changes
i dont know why do you use double pass = 360 / n
and after that pass2 = n * pass, do you mean pass2 = 360?
and why do you use _n?
dont forget about radians, because, i think, sin() and cos() use radians as input parameters
this is not about your previous post but one before it

Alibeg
Junior Poster in Training
81 posts since Aug 2008
Reputation Points: 11
Solved Threads: 11
 

double pass2 = a; //where a is angle between line (first point of polygon joined with centre of polygon) and x axis.....you might like to set pass2 to 0 in the beginning
while(k

Alibeg
Junior Poster in Training
81 posts since Aug 2008
Reputation Points: 11
Solved Threads: 11
 

Woaaah! That did it! I am very thankfull!! Super, just what i need!

Alex_
Junior Poster
175 posts since Jun 2008
Reputation Points: 10
Solved Threads: 3
 

no prob, just dont forget to give the credits to a man who gave you the formula in the first place ;) (nmaillet)

Alibeg
Junior Poster in Training
81 posts since Aug 2008
Reputation Points: 11
Solved Threads: 11
 

This question has already been solved

Post: Markdown Syntax: Formatting Help
You