我正在开发一个模拟器gui,其中用户点击地图的不同点,程序将这些点相互连接,但连接应该以某种方式弯曲(但最好是曲线应该从给定点传递)I找不到合适的方法来实现这个目标。
A similar solution which I could not figure out
我见过类似的问题,通常使用QPainterPath
或实现bezier曲线来解决它们。或者我应该只计算贝塞尔曲线的控制点(如果是这样,如何?)?
任何帮助将不胜感激, 提前谢谢
答案 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
}
}