gpt4 book ai didi

c++ - 移动一组共面点的简单程序不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 13:49:43 27 4
gpt4 key购买 nike

我正在使用简单的叉积计算一组原始点的一组移动点。稍后我比较结果 vector 集是否平行。我看到几乎所有情况下的比较测试都失败了。有人可以告诉我为什么吗?

// Here osg::Vec3 is a container for three floats
std::vector<osg::Vec3 > originalPoints;
originalPoints.push_back(osg::Vec3(10.0,11.0,13.0));
originalPoints.push_back(osg::Vec3(-10.0,12.0,13.0));
originalPoints.push_back(osg::Vec3(5.0,6.0,13.0));
originalPoints.push_back(osg::Vec3(6.75,11.0,13.0));
originalPoints.push_back(osg::Vec3(8.6,-11.0,13.0));

// Here the "^" operator represents cross product
osg::Vec3 tileUpVec = originalPoints[0]^originalPoints[1];
tileUpVec.normalize();

std::vector<osg::Vec3> shift;

osg::Vec3 lineVec1, lineVec2. resultVec;
lineVec1 = originalPoints[0] - originalPoints[1];
resultVec = lineVec1 ^ tileUpVec;
resultVec.normalise();
shift.push_back(resultVec);

for(unsigned int i = 0; i < originalPoints.size(); i++)
{
lineVec1 = originalPoints[i-1] - originalPoints[i];
lineVec2 = originalPoints[i] - originalPoints[i+1];
resultVec = (lineVec + lineVec2) ^ tileUpVec;
resultVec.normalise();
shift.push_back(resultVec);
}

lineVec1 = originalPoints[i-1] - originalPoints[i];
resultVec = lineVec1 ^ tileUpVec;
resultVec.normalise();
shift.push_back(resultVec);

ASSERT_TRUE(shift.size() == originalPoints.size());

std::vector<osg::Vec3> shiftedPoints;

for(unsigned int i = 0; i < shift.size(); i++)
{
shiftedPoints.push_back((shift[i]+originalPoints[i]));
}

float result;

// Here "*" operator represnts dot product
for(unsigned int j = 0; j < (originalPoints.size() - 1); j++)
{
lineVec1 = shiftedPoints[j] - shiftedPoints[j+1];
lineVec1.normalize();
lineVec2 = originalPoints[j] - originalPoints[j+1];
lineVec2.normalize();
result = lineVec1 * lineVec2;
std::cout << result << std::endl;
EXPECT_TRUE(result > 0.995);
}

EXPECT_TRUE 总是失败。这意味着它们不是平行的。什么原因?

最佳答案

您正在创建一个 vector ,其中充满了完全不同的变化。当您通过一堆不同的移位 vector 移动旧集合中的点时,您不应期望新点和旧点之间的 vector 相同。 (如果您已经完成了一些您认为可以保证的数学运算,那么您应该将其包含在您的问题中,以便我们进行检查。)

如果您确信数学是正确的并且问题出在代码上,那么您似乎确实在 for 循环的第一次迭代中遇到了边界错误。它寻找 originalPoints[-1]

编辑添加:

在你的第一个 for 循环中,你定义

linevec1 = original_points[i-1] - original_points[i]
linevec2 = original_points[i] - original_points[i+1]

那你只用linevec1+linevec2,那为什么不直接说

linevec = original_points[i-1]-original_points[i+1]?

关于c++ - 移动一组共面点的简单程序不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23982297/

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