Мне нужны точки «вращающегося цилиндра». У меня есть несколько линий кривой и я ищу реализацию для вычисления 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
Как видите, вертикальный цилиндр работает нормально, но кривая неверна
Это может помочь.
Это не должно быть сложно адаптироваться 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});
}