Problems with Normal Generation & Circle co-ordinates

Hi,
I have written two small programs that were to generate my surface normals and the co-ordinates for drawing a circle. I however am having problems. The result’s of the programs some time include

-1.#IND

I have no idea what this means, the code is:

Circles

#include <iostream.h>
#include <math.h>

int radius =0, strips =0, i;
float angle = 0.0, x =0.0, z = 0.0;

void main ()
{
cout << "Enter Radius, Number of strips:

";
cin >> radius >> strips;

for (i = 0; i &lt;= strips; i++)
{
	angle = ((float) i) / ((float) strips);
	angle = 360.0 * angle;
	x = radius * cos(angle);
	z = radius * sin(angle);

	cout &lt;&lt; "x = " &lt;&lt; x &lt;&lt; "

z = " << z << "

";

}

}

Surface Normals

#include <math.h>
#include <iostream.h>

float V1 [3], V2 [3], N [3], A [3], B [3], C [3];
float scale;
char temp;
bool quit;

void main()
{
while (!quit) {
cout << "

";
cout << "Please enter the co-ordinates for A, B, C:

";
cout << "B****A

C****D

";

	cin &gt;&gt; A[0] &gt;&gt; A[1] &gt;&gt; A[2];
	cin &gt;&gt; B[0] &gt;&gt; B[1] &gt;&gt; B[2];
	cin &gt;&gt; C[0] &gt;&gt; C[1] &gt;&gt; C[2];

	cout &lt;&lt; A[0] &lt;&lt; A[1] &lt;&lt; A[2];
	cout &lt;&lt; B[0] &lt;&lt; B[1] &lt;&lt; B[2];
	cout &lt;&lt; C[0] &lt;&lt; C[1] &lt;&lt; C[2];

	V1[0] = B[0] - A[0];
	V1[1] = B[1] - A[1];
	V1[2] = B[2] - A[2];
	V2[0] = C[0] - B[0];
	V2[1] = C[1] - B[1];
	V2[2] = C[2] - B[2];

	N[0] = (V1[1] * V2[2]) - (V1[2] * V2[1]);
	N[1] = (V1[2] * V2[0]) - (V1[0] * V2[2]);
	N[2] = (V1[0] * V2[1]) - (V1[1] * V2[0]);

	scale = (float) sqrt ((N[0] * N[0]) + (N[1] * N[1]) + (N[1] * N[1]));

	N[0] = N[0] / scale;
	N[1] = N[1] / scale;
	N[2] = N[1] / scale;

	//B****A
	//*    *
	//*    *
	//*    *
	//*    *
	//C****D

	cout &lt;&lt; "

" << N[0] << N[1] << N[2] << "

";
cout << "Any more surface normals calculate?

";
cin >> temp;

	if (temp == 'n')
		quit = true;
}

}

I would be most grateful for help.

Thanks, Paul

Not sure where you get -1.#IND. Sounds like some floating point error.

You sure following code is ok?:

scale = (float) sqrt ((N[0] * N[0]) + (N[1] * N[1]) + (N[1] * N[1]));
N[0] = N[0] / scale;
N[1] = N[1] / scale;
N[2] = N[1] / scale;

Normalizing a 3d vector?

Try:

scale = (float) sqrt ((N[0] * N[0]) + (N[1] * N[1]) + (N[2] * N[2]));
N[0] = N[0] / scale;
N[1] = N[1] / scale;
N[2] = N[2] / scale;

And maybe check for zero result on scale.

Hi,
The surface normal error occurs when i give the following data:

25.0 6.0 -35.0 -25.0 6.0 -35.0 -25.0 -1.0 -35.0

Did you see the index error AndersO pointed to?

Yes, reread my previous message!

Using those vectors you specified will eventually end in a divide by zero!. (In the normalizing code).

Cheers!

Well, I’m a C/C++ programmer with a part-time job with the government. My experience thru mass debugging and programming shows that -1.#IND is a imaginary number (like the sq. rt. of -5 or so, like i). Usually if it’s a Div. by 0 it displays 0 and later shows encryptic bugs. However, it sounds more like an imaginary number. Step thru your program and find out what number is causing all of this.

Hope that helps out

Ok, made that number change pointed out and now i have the results from the above data:

-1.#IND -1.#IND -1.#INF

I’m stuck, when i do the calculation on my calculator i get 0 for the first value

Hi,
Fixed the index error pointed out, me tired, surface normal program now working, i think i will take a break fro mthis as i have been working on my program all yesterday and all today. Thanks, i will look at the circle generation tomorrow.

Paul