Accuracy of getSpacedPoints

Hi,
Is there a way to improve the accuracy of getSpacedPoints

In the example below the output of getSpacedPoints is not constant. I have tried increasing arcLengthDivisions but made little difference

const curve = new THREE.QuadraticBezierCurve3(
		 				new THREE.Vector3( 0, 500, 0 ),
		 				new THREE.Vector3( 500, 500, 0 ),
		 				new THREE.Vector3( 500, 0, 0 )
		 			);
   
		 			const spacedPoints = curve.getSpacedPoints( 3 );

Thank you!

What do you mean by ‘the output of getSpacedPoints is not constant’? It does not return the same coordinates for the same curve?

If you change arcLengthDivisions you must also call updateArcLengths().

Hi, yes I did updateArcLengths().

So if we use 921 as our x an y values

const curve = new THREE.QuadraticBezierCurve3(
		 				new THREE.Vector3( 0, 921, 0 ),
		 				new THREE.Vector3( 921, 921, 0 ),
		 				new THREE.Vector3( 921, 0, 0 )
		 			);
		 			const spacedPoints = curve.getSpacedPoints( 3 );

Then push the points of spacedPoints into and array

Use dist() to calculate the distance between points stored in the array and output to console using the below

console.log(dist(thePoints[0].x,thePoints[0].y,0,thePoints[1].x,thePoints[1].y,0))
console.log(dist(thePoints[1].x,thePoints[1].y,0,thePoints[2].x,thePoints[2].y,0))
console.log(dist(thePoints[2].x,thePoints[2].y,0,thePoints[3].x,thePoints[3].y,0))

I expected the values to be the same , but the console returns the following

247.2
243.5
247.2

Hope that makes sense!

getSpacedPoints should return points (almost) equally spaced along the curve. In the following illustration, the points are spaced equally. The length of the red and the blue fragments is the same.

image

PS. The illustration is drawn by hand, so it is not mathematically accurate.

Yes exactly.

In my example it draws a very basic equal arc through 90 degrees.

I would therefore expect that measuring the distance between these points should return values that are equal.

Obviously measuring the distances between points in your image would return different values due to the shape.

Your arc is not a circular arc.

This is not a problem of accuracy. You cannot represent circles with such quadratic Bezier curves. The curve you get is the tip of a parabola. That’s why you get smaller distance for the middle segment.

You may find details about better approximations of circles here:
https://spencermortensen.com/articles/bezier-circle/

Yes of course, makes sense!

Thank you!

You can try using a CatMullRomCurve instead maybe

Try using a Shape to draw the curve using arc or absarc methods.

Thanks for all the info and suggestions.