3d — Как получить очки вращающегося цилиндра?

Мне нужны точки «вращающегося цилиндра». У меня есть несколько линий кривой и я ищу реализацию для вычисления 16 точек вокруг них, чтобы получить цикл. Моя реализация выглядит так:

QPointF MappingModel::calcThicknessYarns(float fCurrentX, float fCurrentY, int iCurrentCounter)
{
QPointF nextPoint;

int iAmountOfThicknessYarns = 16;
float fSingleAngle = 360.0 / iAmountOfThicknessYarns;

float fCurrentAngle = fSingleAngle * iCurrentCounter;

nextPoint = getXY(fCurrentAngle, 1.0, 1.0, fCurrentX, fCurrentY);

return nextPoint;
}

а также

QPointF MappingModel::getXY(float angle, float width, float height, float xOffset, float yOffset)
{
QPointF xy;

float FI = angle*PIdev;
xy.setX((width * qCos(FI)) + xOffset) ;
xy.setY((height * qSin(FI)) - yOffset);

return xy;
}

Моя выглядит так:

http://www.directupload.net/file/d/3741/e8bafwni_jpg.htm
http://www.directupload.net/file/d/3741/tkykay7w_jpg.htm

Как видите, вертикальный цилиндр работает нормально, но кривая неверна

0

Решение

Это может помочь.

Это не должно быть сложно адаптироваться Vertex в QPointF,

typedef struct {
double x;
double y;
} Vertex;

/**
* @param radius Radius of circle
* @param angle Degrees
* @return The offset of vertex from the center of circle given radius and angle
*/
Vertex getVerticeOffset(double radius, double angle) {
double yOffset = -radius*cos((90 - angle)*M_PI/180);  // convert to radians
return Vertex({(angle >= 90 && angle < 270 ? -1 : 1) * sqrt(pow(radius, 2) - pow(yOffset, 2)), yOffset});
}
0

Другие решения