关于 qt:qt – 使用 N 个点创建曲线路径

qt - creating a curved path using N points

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

一个我想不通的类似解决方案

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

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


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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
    }
}

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

如果您只知道曲线上的起点、终点和另一个点,这很好地说明了如何计算控制点。在您的情况下,曲线上的点可能是起点和终点之间的中点。