gpt4 book ai didi

c++ - C++ 中的嵌套 For 循环

转载 作者:行者123 更新时间:2023-11-28 01:52:33 32 4
gpt4 key购买 nike

你好,我是一个相对较新的 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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com