在数学表达式中将 QPoint 切换为 struct
Switch QPoint to struct in mathematical expression
不明白这里QPoint是怎么计算的。 QPoint 有 x 和 y。我已经尝试 运行 使用自定义结构进行此操作,但出现诸如二进制表达式的无效操作数之类的错误。
作品:
void test(QPoint p0, QPoint p1, QPoint p2, QPoint p3) {
QPoint point;
for(double t = 0.0; t<=1.0; t+=0.001){
point = pow((1-t),3) * p0 + 3 * pow((1-t),2) * t * p1 + 3 * (1-t) * pow(t,2) * p2 + pow(t,3) * p3;
}
}
不起作用
struct Point {
int x;
int y;
};
void test(Point p0, Point p1, Point p2, Point p3) {
Point point;
for(double t = 0.0; t<=1.0; t+=0.001){
point = pow((1-t),3) * p0 + 3 * pow((1-t),2) * t * p1 + 3 * (1-t) * pow(t,2) * p2 + pow(t,3) * p3;
}
}
我可以使用 Point 结构而不是 QPoint 以某种方式让它工作吗?
如果您查看关于 QPoint
的 Qt documentation,您会发现 operator*()
和 operator+()
(您在此处使用的)对于 QPoint
.
如果你想让它与你的 class 一起工作,你也需要重载它们。
使 test()
函数正常工作所需的最少重载是:
Point operator*(double factor, const Point & p)
{
return Point{
static_cast<int>(std::round(p.x * factor)),
static_cast<int>(std::round(p.y * factor))
};
}
Point operator+(const Point & p1, const Point & p2)
{
return Point{p1.x + p2.x, p1.y + p2.y};
}
为了更加一致,您可以添加对称的:
Point operator*(const Point & p, double factor)
{
return factor * p;
}
无论如何,如果你想用具有完全算术兼容性的Point
替换QPoint
,我建议你编写[=12的文档中列出的所有重载(用于算术比较) =].
不明白这里QPoint是怎么计算的。 QPoint 有 x 和 y。我已经尝试 运行 使用自定义结构进行此操作,但出现诸如二进制表达式的无效操作数之类的错误。
作品:
void test(QPoint p0, QPoint p1, QPoint p2, QPoint p3) {
QPoint point;
for(double t = 0.0; t<=1.0; t+=0.001){
point = pow((1-t),3) * p0 + 3 * pow((1-t),2) * t * p1 + 3 * (1-t) * pow(t,2) * p2 + pow(t,3) * p3;
}
}
不起作用
struct Point {
int x;
int y;
};
void test(Point p0, Point p1, Point p2, Point p3) {
Point point;
for(double t = 0.0; t<=1.0; t+=0.001){
point = pow((1-t),3) * p0 + 3 * pow((1-t),2) * t * p1 + 3 * (1-t) * pow(t,2) * p2 + pow(t,3) * p3;
}
}
我可以使用 Point 结构而不是 QPoint 以某种方式让它工作吗?
如果您查看关于 QPoint
的 Qt documentation,您会发现 operator*()
和 operator+()
(您在此处使用的)对于 QPoint
.
如果你想让它与你的 class 一起工作,你也需要重载它们。
使 test()
函数正常工作所需的最少重载是:
Point operator*(double factor, const Point & p)
{
return Point{
static_cast<int>(std::round(p.x * factor)),
static_cast<int>(std::round(p.y * factor))
};
}
Point operator+(const Point & p1, const Point & p2)
{
return Point{p1.x + p2.x, p1.y + p2.y};
}
为了更加一致,您可以添加对称的:
Point operator*(const Point & p, double factor)
{
return factor * p;
}
无论如何,如果你想用具有完全算术兼容性的Point
替换QPoint
,我建议你编写[=12的文档中列出的所有重载(用于算术比较) =].