qt - 使用N个点创建弯曲路径

时间:2014-04-21 06:23:44

标签: qt path curve

我正在开发一个模拟器gui,其中用户点击地图的不同点,程序将这些点相互连接,但连接应该以某种方式弯曲(但最好是曲线应该从给定点传递)I找不到合适的方法来实现这个目标。

A similar solution which I could not figure out

我见过类似的问题,通常使用QPainterPath或实现bezier曲线来解决它们。或者我应该只计算贝塞尔曲线的控制点(如果是这样,如何?)?

任何帮助将不胜感激, 提前谢谢

2 个答案:

答案 0 :(得分:0)

立方Bézier曲线由4个点组成:Start,End,Control1和Control2。根据两个控制点,曲线可以具有不同的形状。由于您没有控制点,您应该以某种方式计算它们。

如果您只知道曲线上的起点,终点和另一个点,

This可以很好地描述如何计算控制点。在您的情况下,曲线上的点可以是开始和结束之间的中点。

答案 1 :(得分:0)

void Beziertest::Bezier2D(QList<QPoint> points)
{
    QImage area(600,700,QImage::Format_RGB32);
    int n=points.length()-1;
    for(double u = 0.0 ; u <= 1.0 ; u += 0.001)
    {
        //calculate x coordinate 
        double xu=0.0;
        for (int i = n; i >= 0; i--) {
            xu+=points[i].x()*((factorial(n)/(factorial(i)*factorial((n-i))))*pow(u,i)*pow((1-u),(n-i)));
        }

        //calculate y coordinate 
        double yu=0.0;
        for (int i = n; i >= 0; i--) {
            yu+=points[i].y()*((factorial(n)/(factorial(i)*factorial((n-i))))*pow(u,i)*pow((1-u),(n-i)));
        }

        area.setPixel((int)xu , (int)yu , deger);
        setPixmap(QPixmap::fromImage(res));//set image to label
    }
}