Skip to content

Instantly share code, notes, and snippets.

@CvutFelStudentAccount
Created November 11, 2011 22:44
Show Gist options
  • Select an option

  • Save CvutFelStudentAccount/1359552 to your computer and use it in GitHub Desktop.

Select an option

Save CvutFelStudentAccount/1359552 to your computer and use it in GitHub Desktop.
Square Intersection (C++)
#include <iostream>
using namespace std;
bool dotykajiSe(double delkaHranyPrvnihoCtverce, double delkaHranyDruhehoCtverce, double x1, double y1, double x2, double y2){
// DRUHEJ MOC NA SEVERU
if( (y1+(delkaHranyPrvnihoCtverce/2))<(y2-(delkaHranyDruhehoCtverce/2)) ){
cout << "Ctverce se ani nedotykaji."<< endl;
return false;
}
// DRUHEJ MOC NA JIHU
else if( (y1-(delkaHranyPrvnihoCtverce/2))>(y2+(delkaHranyDruhehoCtverce/2)) ){
cout << "Ctverce se ani nedotykaji."<< endl;
return false;
}
// DRUHEJ MOC NA VYCHODNE
else if( (x1+(delkaHranyPrvnihoCtverce/2))<(x2-(delkaHranyDruhehoCtverce/2)) ){
cout << "Ctverce se ani nedotykaji."<< endl;
return false;
}
// DRUHEJ MOC NA ZAPADNE
else if( (x1-(delkaHranyPrvnihoCtverce/2))>(x2+(delkaHranyDruhehoCtverce/2)) ){
cout << "Ctverce se ani nedotykaji."<< endl;
return false;
}
else{return true;}
}
double vypoctiObsahSjednoceni(double delkaHranyPrvnihoCtverce, double delkaHranyDruhehoCtverce, double x1, double y1, double x2, double y2){
double obsahSjednoceni;
double delkaYstranyPruniku;
double delkaXstranyPruniku;
double obsahPruniku;
// Druhej je vnorenej
bool druhyJeVnorenVychodne = (x1+(delkaHranyPrvnihoCtverce/2))>(x2+(delkaHranyDruhehoCtverce/2));
bool druhyJeVnorenZapadne = (x1-(delkaHranyPrvnihoCtverce/2))<(x2-(delkaHranyDruhehoCtverce/2));
bool druhyJeVnorenSeverne = (y1+(delkaHranyPrvnihoCtverce/2))>(y2+(delkaHranyDruhehoCtverce/2));
bool druhyJeVnorenJizne = (y1-(delkaHranyPrvnihoCtverce/2))<(y2-(delkaHranyDruhehoCtverce/2));
if(druhyJeVnorenVychodne && druhyJeVnorenSeverne && druhyJeVnorenZapadne && druhyJeVnorenJizne){
obsahSjednoceni = (delkaHranyPrvnihoCtverce*delkaHranyPrvnihoCtverce);
cout << "Obsah sjednoceni dvou ctvercu je "<< obsahSjednoceni << "."<< endl;
return obsahSjednoceni;
}
// Prvni je vnorenej
bool PrvniJeVnorenVychodne = (x2+(delkaHranyDruhehoCtverce/2))>(x1+(delkaHranyPrvnihoCtverce/2));
bool PrvniJeVnorenZapadne = (x2-(delkaHranyDruhehoCtverce/2))<(x1-(delkaHranyPrvnihoCtverce/2));
bool PrvniJeVnorenSeverne = (y2+(delkaHranyDruhehoCtverce/2))>(y1+(delkaHranyPrvnihoCtverce/2));
bool PrvniJeVnorenJizne = (y2-(delkaHranyDruhehoCtverce/2))<(y1-(delkaHranyPrvnihoCtverce/2));
if(PrvniJeVnorenVychodne && PrvniJeVnorenSeverne && PrvniJeVnorenZapadne && PrvniJeVnorenJizne){
obsahSjednoceni = (delkaHranyDruhehoCtverce*delkaHranyDruhehoCtverce);
cout << "Obsah sjednoceni dvou ctvercu je "<< obsahSjednoceni << "."<< endl;
return obsahSjednoceni;
}
// Samotny vypocet obsahu
if(y2>y1){delkaYstranyPruniku = (y1+(delkaHranyPrvnihoCtverce/2))-(y2-(delkaHranyDruhehoCtverce/2));}
if(y1>y2){delkaYstranyPruniku = (y2+(delkaHranyDruhehoCtverce/2))-(y1-(delkaHranyPrvnihoCtverce/2));}
if(x2>x1){delkaXstranyPruniku = (x1+(delkaHranyPrvnihoCtverce/2))-(x2-(delkaHranyDruhehoCtverce/2));}
if(x1>x2){delkaXstranyPruniku = (x2+(delkaHranyDruhehoCtverce/2))-(x1-(delkaHranyPrvnihoCtverce/2));}
if(x1==x2){
if(delkaHranyPrvnihoCtverce>delkaHranyDruhehoCtverce){delkaXstranyPruniku=delkaHranyDruhehoCtverce;}
else{delkaXstranyPruniku=delkaHranyPrvnihoCtverce;}
}
if(y1==y2){
if(delkaHranyPrvnihoCtverce>delkaHranyDruhehoCtverce){delkaYstranyPruniku=delkaHranyDruhehoCtverce;}
else{delkaYstranyPruniku=delkaHranyPrvnihoCtverce;}
}
if(((x2-delkaHranyDruhehoCtverce/2)<(x1-delkaHranyPrvnihoCtverce/2))&&(x2+delkaHranyDruhehoCtverce/2)>(x1+delkaHranyPrvnihoCtverce/2)){
delkaXstranyPruniku = delkaHranyPrvnihoCtverce;
}
if(((x2-delkaHranyDruhehoCtverce/2)>(x1-delkaHranyPrvnihoCtverce/2))&&(x2+delkaHranyDruhehoCtverce/2)<(x1+delkaHranyPrvnihoCtverce/2)){
delkaXstranyPruniku = delkaHranyDruhehoCtverce;
}
if(((y2-delkaHranyDruhehoCtverce/2)<(y1-delkaHranyPrvnihoCtverce/2))&&(y2+delkaHranyDruhehoCtverce/2)>(y1+delkaHranyPrvnihoCtverce/2)){
delkaYstranyPruniku = delkaHranyPrvnihoCtverce;
}
if(((y2-delkaHranyDruhehoCtverce/2)>(y1-delkaHranyPrvnihoCtverce/2))&&(y2+delkaHranyDruhehoCtverce/2)<(y1+delkaHranyPrvnihoCtverce/2)){
delkaYstranyPruniku = delkaHranyDruhehoCtverce;
}
obsahPruniku = delkaXstranyPruniku*delkaYstranyPruniku;
obsahSjednoceni = obsahSjednoceni=((delkaHranyPrvnihoCtverce*delkaHranyPrvnihoCtverce)+(delkaHranyDruhehoCtverce*delkaHranyDruhehoCtverce)) - obsahPruniku;
cout << "Obsah sjednoceni dvou ctvercu je "<< obsahSjednoceni << "."<< endl;
return obsahSjednoceni;
}
int main(){
double delkaHranyPrvnihoCtverce;
double delkaHranyDruhehoCtverce;
double x1;
double y1;
double x2;
double y2;
cout << "Zadejte delku hrany prvniho ctverce: ";
if(!(cin >> delkaHranyPrvnihoCtverce)) {
cout << "Spatny vstup.\n";
return 0;
}
if(delkaHranyPrvnihoCtverce<0){
cout << "Spatny vstup." << endl;
return 0;
}
cout << "Zadejte x-ovou souradnici stredu prvniho ctverce: ";
if(!(cin >> x1)) {
cout << "Spatny vstup.\n";
return 0;
}
cout << "Zadejte y-ovou souradnici stredu prvniho ctverce: ";
if(!(cin >> y1)) {
cout << "Spatny vstup.\n";
return 0;
}
cout << "Zadejte delku hrany druheho ctverce: ";
if(!(cin >> delkaHranyDruhehoCtverce)) {
cout << "Spatny vstup.\n";
return 0;
}
if(delkaHranyDruhehoCtverce<0){
cout << "Spatny vstup." << endl;
return 0;
}
cout << "Zadejte x-ovou souradnici stredu druheho ctverce: ";
if(!(cin >> x2)) {
cout << "Spatny vstup.\n";
return 0;
}
cout << "Zadejte y-ovou souradnici stredu druheho ctverce: ";
if(!(cin >> y2)) {
cout << "Spatny vstup.\n";
return 0;
}
if(!(dotykajiSe(delkaHranyPrvnihoCtverce, delkaHranyDruhehoCtverce, x1, y1, x2, y2))){
return 0;
}
vypoctiObsahSjednoceni(delkaHranyPrvnihoCtverce, delkaHranyDruhehoCtverce, x1, y1, x2, y2);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment