For循环只比较数组的第一部分,而不是整个数组 我正在制作一个基本形状库,作为学习C++的一个实践,我正在制作三角形类,并且正在做一个函数来检查两个三角形是否是一致的/相似的。但是,用于比较两个三角形的for循环仅比较数组的第一个元素 我对C++很陌生,所以我不知道该怎么做才能解决这个问题。 bool三角形::checkCongressionwith(三角形比较){ 浮动*侧面1=侧面; float*sides2=比较侧; 标准::排序(侧1,侧1+3); 标准::排序(边2,边2+3); 对于(int i=0;i

For循环只比较数组的第一部分,而不是整个数组 我正在制作一个基本形状库,作为学习C++的一个实践,我正在制作三角形类,并且正在做一个函数来检查两个三角形是否是一致的/相似的。但是,用于比较两个三角形的for循环仅比较数组的第一个元素 我对C++很陌生,所以我不知道该怎么做才能解决这个问题。 bool三角形::checkCongressionwith(三角形比较){ 浮动*侧面1=侧面; float*sides2=比较侧; 标准::排序(侧1,侧1+3); 标准::排序(边2,边2+3); 对于(int i=0;i,c++,arrays,C++,Arrays,如果一个三角形的三条边等于另一个三角形的三条边,则三角形是全等的 对于类似的三角形: 如果两个三角形的两个角相等,则三角形相似。[..]当两个角相等时,所有三个角都必须相等 这两个规则都意味着元素的特殊排列并不重要,只是当它们包含所有相同的元素时,它们必须相等,而不考虑顺序)。即({3,1,2}=={1,2,3}) 首先对数组进行排序(std::sort)只会使比较更容易(只要一对边或角度不相等,您就知道三角形不能全等/相似),如果(angles1[i]!=angles2[i]){return

如果一个三角形的三条边等于另一个三角形的三条边,则三角形是全等的

对于类似的三角形:

如果两个三角形的两个角相等,则三角形相似。[..]当两个角相等时,所有三个角都必须相等

这两个规则都意味着元素的特殊排列并不重要,只是当它们包含所有相同的元素时,它们必须相等,而不考虑顺序)。即(
{3,1,2}=={1,2,3}


首先对数组进行排序(
std::sort
)只会使比较更容易(只要一对边或角度不相等,您就知道三角形不能全等/相似),如果(angles1[i]!=angles2[i]){return false;}在
行中检查

需要注意的一点是,比较浮点数的精确相等/不相等几乎永远不会达到您希望的效果,因为大多数浮点数学运算引入的舍入误差意味着这些值可能不会完全相等(即使从数学上讲,它们应该相等)。这里有一篇关于此主题的文章可能很有用:这也是学习使用调试器的好时机。如果您单步执行代码并查看角度[0]和角度2[0](或侧面和侧面2)的值你可能会看到像1.49000003和1.49000001这样的东西,你的电脑会对你隐藏起来,因为它包围了它们。谢谢你的澄清。我忘了自己做。