Skip to main content
GameDev.net gamedev.net
🔒 Locked

Randomly Generating Lines...

Started by intenseza Mar 6, 2013 at 7:34 PM 3 replies 1.9k views
Original Post
intenseza
intenseza

Hey all.

Why won't this code work? I'm trying to randomly draw lines...

public void GenerateRandomObjects()
{
for (int i = 1; i <= 10; i++)
{
Gl.glBegin(Gl.GL_LINES);
Random r = new Random();
int X1 = r.Next(800);
int X2 = r.Next(800);
int Y1 = r.Next(800);
int Y2 = r.Next(800);
Gl.glVertex2i(X1, Y1);
Gl.glVertex2i(X2, Y2);
Gl.glEnd();
}
Gl.glFlush();
}
It produces 1 line :/
fastcall22
fastcall22

I'm trying to randomly draw lines...
It produces 1 line :/

It's actually drawing the same line 10 times. This is because you are resetting the RNG after every iteration. See the System.Random constructor. The default constructor sets the seed to the current system time in seconds. Because it takes less than a second to draw those lines, you are getting the same seed, and consequently the same sequence of random numbers.

You'll need to move r before the loop.
intenseza
intenseza

You Sir are a lifesaver. I would have spent hours trying to figure it out. Bless you!

intenseza
intenseza

Sorry to worry again. I'm implementing the cohen clipping algorithm and in order to do this, I need to be able to show the parts of the line that are outside the viewport in a different colour. Firstly, how is it possible to show objects that aren't within the viewport?

Rancorb
Rancorb

My guess is define your own "viewport" that is smaller than the screen size. Then you just need to find the intersections of each line with your viewport rectangle and draw the segments of each line in the required colour based on the start point, intersection point(s) and end point.

Don't forget to draw the rectangle to show your viewport.

Tim Cooper - software developer, project manager and occasional iOS app developer.
  Creative Shadows Ltd - My hobby company website  

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.