-(void)userShow{
vector<CGPoint>::iterator it;
vector<CGPoint>* xp = x.graphPoints;
vector<CGPoint>* yp = y.graphPoints;
xVal = new vector<double>();
yVal = new vector<double>();
xyVal = new vector<double>();
xxVal = new vector<double>();
value = new vector<double>();
c = new vector<double>();
for(it = xp->begin(); it != xp->end(); ++it){
xVal->push_back(it->y);
xxVal->push_back(it->x);
}
for(it = yp->begin(); it != yp->end(); ++it){
xyVal->push_back(it->x);
}
for (int i = 0; i < xVal->size(); i++){
c = xVal[i];
while (xyVal[c] < xxVal[i];){
c++;
if ((c-1)<=xxVal[i]<=c){
double value = xp[c-1] + (xp[c] - yp[c-1])*(xxVal[i] - xyVal[c-1])/(xyVal[c] - xyVal[c-1]);
}
yVal->push_back(value);
}
}
UserGraph->removeAllData();
UserGraph->addDataSet(xVal, yVal, [UIColor redColor], 0, false, true, 2);
UserGraph->updateAll();
}
上面是我想要发生的伪代码。我仍然有理解向量的问题。正如您在上面看到的,使用yVal =“...”时,使用vector<CGPoint>
和vector<double>
的二进制表达式存在问题。
这个算法应该做的是在两个图x(t)
和y(t)
上画一条线,然后抓住x(t)
的{{1}}坐标并将它变成一个新的载体。在第二段时间之后,将y
的{{1}}坐标与x(t)
x
坐标进行比较以获取y(t)
坐标。当x
的x和y
x(t)
不匹配时,需要执行y(t)
=算法。
有人可以帮我把我的伪代码变成工作代码吗?干杯
答案 0 :(得分:2)
你的代码中有一些谜团,但这样的事情有希望让你开始。我删除了使用指针 - vector
并将一些注释排成一行来解释我的更改。
void userShow() {
// I assume that x.graphPoints is just some `std::vector<CGPoint>` and you just want to use it locally
// if x.graphPoints returns an "std::vector<CGPoint> *" (pointer-to-vector),
// you should probably modify the class/struct/whatever to just use the vector,
// not a pointer-to-vector
vector<CGPoint>& xp = x.graphPoints;
// ditto for y.graphPoints
vector<CGPoint>& yp = y.graphPoints;
// You almost never use pointers to containers, nor allocate them with new -
// it's an atypical practice in C++
/*
xVal = new vector<double>();
yVal = new vector<double>();
xyVal = new vector<double>();
*/
// instead just create the vectors on the stack
std::vector<double> xVal, yVal, xyVal;
std::vector<CGPoint>::iterator it;
// These have been changed to not use -> member notation, since we're not
// using pointers anymore
for(it = xp.begin(); it != xp.end(); ++it){
xVal.push_back(it->y);
xxVal.push_back(it->x); // I have no idea what xxVal is? I think it's xyVal?
// xyVal.push_back(it->x); // like this?
}
// you can iterate through a vector with this type of loop, or
// use an iterator as above
for (int i = 0; i < xp.size(); ++i){
int c = 1;
while (xyVal[c] < xxVal[i]) {
++c;
// (c-1)<=xxVal[i]<=c; // ???
// I think the previous line means...c gets the value of xyVal[i], and
// xxVal gets c-1? You'll have to explain this, otherwise it it just a
// free-standing conditional comparison
// EDIT: I think I understand what you mean
// this was a conditional check to do the yVal stuff
/**
if ( (c-1) <= xxVal[i] && xxVal[i] <= c) {
// yVal = xp[c-1] + (xp[c] - yp[c-1])*(xxVal[i]-xyVal[c-1])/(xyVal[c] - xyVal[c-1]);
} */
// as mentioned, yVal is a vector, so what do you want?
yVal = xp[c-1] + (xp[c] - yp[c-1])*(xxVal[i]-xyVal[c-1])/(xyVal[c] - xyVal[c-1]);
}
}
}
答案 1 :(得分:1)
yVal = xp[c-1] + ....
yVal指向双打矢量(你几乎肯定不会使用btw)而不是值