作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
你好,我是一个相对较新的 C++ 程序员。我对我的代码有疑问
我有一个具有双 x 和 y 的点 2d 类。
我正在尝试以下嵌套循环:
Point2D Dec(float t)
{
Point2D Temp;
vector<Point2D>Bcopy=H->B;
for(int p=0;p<Bcopy.size()-1;p++){
for(int l=p;l<Bcopy.size();l++){
Temp=(1-t)*Bcopy.at[p][l-1]+t*Bcopy.at[p+1][l-1];
}
}
return Temp;
}
所以本质上还有另一个类有一个带有点 2d B 的 vector ,H 是指向它的指针。这些是存储来自鼠标交互等的点并绘制它们。所以我只是创建了它的一个拷贝,然后执行了上面的嵌套循环,然后我也使用这些点来绘制它们。
我不断收到以下两个错误:
std::vector<Point2D,std::allocator<-Ty>>::at':function call missing argument list;use'&std::vector<Point2D,std::allocator<_Ty>>:at' to create a pointer to member
和
下标需要数组或指针。
这两个错误都是针对行
Temp=(1-t)*Bcopy.at[p][l-1]+t*Bcopy.at[p+1][l-1]
在代码中
我尝试了很多不同的方法,但我要么不断收到更多错误,要么只收到这两个错误。我试着用谷歌搜索并理解错误,但真的做不到。任何帮助将不胜感激
谢谢
编辑玩了很久
我做了以下事情:
vector<2D>NewBcopy;
double Rx=0 ,Ry=0;
for(int p=0;p<Bcopy.size()-1;p++){
for(int l=p;l<Bcopy.size();l++){
if(l==p)
{Newcopy.at(l)=Bcopy.at(l);
}
else
{Rx=(1-t)*Bcopy.at(p).x+t*Bcopy.at(p+1).x;
Ry=(1-t)*Bcopy.at(p).y+t*Bcopy.at(p+1]).y:
}
Temp.x=Rx;
Temp.y=Ry;
}
}
return Temp;
}
最佳答案
您可以通过添加一些在点和标量之间执行数学运算的函数来扩展表示二维点的类。一个最小的例子是这样的:
class Point2D
{
public:
double x, y;
Point2D(double xx = 0.0, double yy = 0.0) : x{xx}, y{yy} {}
};
Point2D operator*(const Point2D &p, double s)
{
return Point2D{p.x * s, p.y *s};
}
Point2D operator+(const Point2D &a, const Point2D &b)
{
return Point2D{a.x + b.x, a.y + b.y};
}
在那之后,实现像 De Castelljau 这样的算法就容易多了。以下是一个可能的(未优化的)实现:
Point2D De_Casteljau(std::vector<Point2D> B, double t)
{
for ( int i = 0; i < B.size() - 1; ++i )
{
for ( int j = 0; j < B.size() - 1 - i ; ++j )
{
B[j] = B[j] * (1.0 - t) + B[j + 1] * t;
}
}
return B[0];
}
我用这个简单的程序测试了它:
#include <iostream>
#include <vector>
#include <iomanip>
//... include here the preceding snippets...
int main()
{
using std::setw;
std::vector<Point2D> B {
{0,0}, {0,1}, {2,1}, {2,2}
};
std::cout << " t x y\n";
for ( double i = 0; i <= 1.0; i += 0.1 )
{
auto p = De_Casteljau(B, i);
std::cout << std::fixed << std::setprecision(2) << setw(6) << i
<< std::setprecision(4) << setw(8) << p.x
<< setw(8) << p.y << '\n';
}
return 0;
}
结果如下:
t x y
0.00 0.0000 0.0000
0.10 0.0560 0.2720
0.20 0.2080 0.4960
0.30 0.4320 0.6840
0.40 0.7040 0.8480
0.50 1.0000 1.0000
0.60 1.2960 1.1520
0.70 1.5680 1.3160
0.80 1.7920 1.5040
0.90 1.9440 1.7280
1.00 2.0000 2.0000
关于c++ - C++ 中的嵌套 For 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42420862/
我是一名优秀的程序员,十分优秀!