For 循环仅比较数组的第一部分而不是整个数组

For loop only compares the first part of the arrays instead of whole

本文关键字:数组 一部分 第一部 循环 比较 For      更新时间:2023-10-16

嗨,我正在制作一个基本的形状库作为学习C++的练习,我正在制作三角形类,并正在制作一个用于检查两个三角形是否全等/相似的函数。但是,用于比较两个三角形的 for 循环仅比较数组的第一个元素。

我对C++很陌生,所以我不知道该尝试什么来解决这个问题。

bool Triangle::checkCongruentWith(Triangle comparee){
float* sides1 = sides;
float* sides2 = comparee.sides;
std::sort(sides1, sides1+3);
std::sort(sides2, sides2+3);
for(int i = 0; i < 3; i++){
std::cout<<sides1[i]<<" "<<sides2[i]<<std::endl;
if(sides1[i]!=sides2[i]){
return false;
}
}
return true;
}
bool Triangle::checkSimilarWith(Triangle comparee){
float* angles1 = angles;
float* angles2 = comparee.angles;
std::sort(angles1, angles1+3);
std::sort(angles2, angles2+3);
for(int i = 0; i < 3; i++){
std::cout<<angles1[i]<<" "<<angles2[i]<<std::endl;
if(angles1[i]!=angles2[i]){
return false;
}
}
return true;
}

此代码中使用的全等测试为:

如果一个三角形的三条边

等于另一个三角形的三条边,则三角形全等。

对于类似的三角形是:

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

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

首先对数组进行排序(std::sort)只是为了更容易比较(一旦一对边或角不相等,你就知道三角形不能全等/相似),这在行if(angles1[i]!=angles2[i]){ return false;}中检查。