圆周的绘制有很多的方法,这只是其中的一种,根据图形学中圆周生成的算法演变而来,生成圆周的顶点,实现环境为OSG。
算法的公式为:P(X(u),Z(U))=P(D+A*(cos(u)),A*sin(u))
A:圆周半径
D:谝置距离
实现的代码为:
//生成圆的顶点
osg::ref_ptr<osg::Vec3Array> CirclePoints(osg::Vec3 Opoint, osg::Vec2 MinUMaxU, int NumU, float Dx = 10, float Dy = 10, float A = 5)
{
osg::ref_ptr<osg::Vec3Array> Line_Points = new osg::Vec3Array;
///*<UV的绘制范围>*/
float MinU = MinUMaxU.x();
float MaxU = MinUMaxU.y();
//计算C(v),假设C(v)为圆弧线
for (int u = 0; u <= NumU; u++)
{
osg::Vec3 CP1;
CP1.x() = Opoint.x() + Dx + A*cos(MinU + (MaxU - MinU) / NumU * (u));
CP1.y() = Opoint.y() + Dy + A*cos(MinU + (MaxU - MinU) / NumU * (u));
CP1.z() = Opoint.z() + A*sin(MinU + (MaxU - MinU) / NumU * (u));
Line_Points->push_back(CP1);
}
return Line_Points;
}