Jump to content
  • Advertisement
Sign in to follow this  
cptrnet

circle algorithm

This topic is 4804 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hello, i'm trying to make a circle algorithm but Im having trouble heres what I got so far.
m_ColoredVertices = new CustomVertex.PositionColored[m_NumVertices];
			m_VertexFormat = CustomVertex.PositionColored.Format;
			m_VertexBuffer = new VertexBuffer(typeof(CustomVertex.PositionColored),
				m_NumVertices, D3DDevice, Usage.Dynamic | Usage.WriteOnly, 
				m_VertexFormat, Pool.Default);

			double tempx = m_XPos;
			double tempy = m_YPos;

			float deg = 0;

			Random r = new Random(100);

			for(int i = 0; i < m_NumVertices; i++)
			{
				tempx = m_Radius * Math.Cos(deg);
				tempy = m_Radius * Math.Sin(deg);
				deg += .5f;
				m_ColoredVertices.Position = new Vector3(
					(float)tempx + (m_XPos + m_Radius), 
					(float)tempy + (m_YPos + m_Radius), 
					0f);
m_ColoredVertices.Color = Color.FromArgb(r.Next(255),r.Next(255),r.Next(255)).ToArgb();
			}
			
m_VertexBuffer.SetData(m_ColoredVertices, 0, LockFlags.None);

I pass in how many subdivisions I want and thats the m_NumVertices I render it with a TriangleFan, if I set the subdivisions up really high it looks fine. But when I turn it down its messed up and doesnt finish drawing the circle completley. I am a real newbie at this so any help with this would be appreiciated, thanks

Share this post


Link to post
Share on other sites
Advertisement
Hi,

Your code for incrementing deg might well be your problem for it not completing the full circle.

Your deg += .5f line obviously increments it 0.5 per iteration, the number of iterations being the number of subdivisions you're after.

A complete circle is 2*pi radians round, or roughly 6.28; thus you'd need 13 iterations for a complete circle (12.56 to be picky [wink]). Any more than 13 iterations and you'll start duplicating your circle, any less and you'll get an incomplete circle.

To get a solution, I haven't tested it, but constructing your loop something more like:

for( int i = 0; i < m_NumVertices; i++ )
{
float angle = ((float)i / (float)m_NumVertices) * 2 * 3.14159f;
float xPosition = m_Xpos + (m_Radius * Math.Cos( angle ));
float yPosition = m_YPos + (m_Radius * Math.Sin( angle ));
//Construct your vertex here using xPosition and yPosition
}



Whatever value m_NumVertices takes should now generate a perfect circle.

hth
Jack

Share this post


Link to post
Share on other sites
Guest Anonymous Poster
The Sin and Cos functions use radians not degrees. You are counting in steps of half a radian each time (deg += .5f) regardless of the number of vertices you are using. You need to go from 0 to 360 degrees in (m_iNumVertices) steps, and 360 degrees is 2*Pi radians, so if you add (2 * Math.Pi / m_iNumVertices) each time then it should work fine.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!