
#define SET_GET_FLOAT_PROPERTY(name) \ virtual void Set##name##(float v)\ {\ m_##name## = v;\ }\ float Get##name##() const\ {\ return m_##name##;\ } #define PI 3.14159265f #define FRACTAL_RADIUS 5.0f #define EPSILON 0.0001f // -------------------------------------------------------------------------------------- class FractalEquation { public: FractalEquation() { m_StartX = 0.0f; m_StartY = 0.0f; m_StartZ = 0.0f; m_ParamA = 0.0f; m_ParamB = 0.0f; m_ParamC = 0.0f; m_ParamD = 0.0f; m_ParamE = 0.0f; } // 求迭代值 virtual void IterateValue(float x, float y, float z, float& outX, float& outY, float& outZ) const = NULL; // 计算点集的Y轴与X轴坐标 virtual void CalculatePoints(void* curveVerticesPtr, unsigned int stride, unsigned int count) { char* xPtr = (char*)curveVerticesPtr; char* yPtr = (char*)curveVerticesPtr + sizeof(float); char* zPtr = (char*)curveVerticesPtr + 2*sizeof(float); float x, y, z; float nx, ny, nz; x = m_StartX; y = m_StartY; z = m_StartZ; for (unsigned int i = 0; i < count; i++) { *(float*)xPtr = x; *(float*)yPtr = y; *(float*)zPtr = z; IterateValue(x, y, z, nx, ny, nz); x = nx; y = ny; z = nz; xPtr += stride; yPtr += stride; zPtr += stride; } } SET_GET_FLOAT_PROPERTY(StartX); SET_GET_FLOAT_PROPERTY(StartY); SET_GET_FLOAT_PROPERTY(StartZ); SET_GET_FLOAT_PROPERTY(ParamA); SET_GET_FLOAT_PROPERTY(ParamB); SET_GET_FLOAT_PROPERTY(ParamC); SET_GET_FLOAT_PROPERTY(ParamD); SET_GET_FLOAT_PROPERTY(ParamE); virtual bool IsValidParamA() const {return false;} virtual bool IsValidParamB() const {return false;} virtual bool IsValidParamC() const {return false;} virtual bool IsValidParamD() const {return false;} virtual bool IsValidParamE() const {return false;} virtual bool Is3D() const {return false;} protected: float m_StartX; float m_StartY; float m_StartZ; float m_ParamA; float m_ParamB; float m_ParamC; float m_ParamD; float m_ParamE; };

// 求迭代值 virtual void IterateValue(float x, float y, float z, float& outX, float& outY, float& outZ) const = NULL;