#pragma once

#include "affnmtrx.h"

class CubicCurve
{
public:
	#if defined(USE_SIGNATURE)
		friend int Is_Signature_Bad(const volatile CubicCurve *);
	#endif

	CubicCurve(					// Hermite form
		const Point3D& p1,
		const Vector3D& r1,
		const Point3D& p4,
		const Vector3D& r4
	);
	CubicCurve(					// Bezier form
		const Point3D& p1,
		const Point3D& p2,
		const Point3D& p3,
		const Point3D& p4
	);

	void Evaluate(Scalar t, Point3D *p, Vector3D *v);

	Logical TestInstance() const;

protected:
	AffineMatrix basisMatrix;
};