1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
double distCenterX, distCenterY, distCenter, angle1, angle2, pi, x1 , y1, x2, y2, a1, b1, da1, db1, a2, b2, da2, db2;
pi=3.14;
// represente en gros mon hypotenuse
distCenter = sqrt(pow(polygonList[compt]->centroid.datapointx - polygonList[compt2]->centroid.datapointx, 2) + pow(polygonList[compt]->centroid.datapointy - polygonList[compt2]->centroid.datapointy, 2));
//4 possibilities
if (polygonList[compt]->centroid.datapointx > polygonList[compt2]->centroid.datapointx && polygonList[compt]->centroid.datapointy < polygonList[compt2]->centroid.datapointy) {
distCenterX = polygonList[compt]->centroid.datapointx - polygonList[compt2]->centroid.datapointx;
distCenterY = polygonList[compt2]->centroid.datapointy - polygonList[compt]->centroid.datapointy;
angle1 = acos(distCenterY / distCenter)* (180 / pi);
angle1 = angle1 + 90;
angle2 = acos(distCenterX / distCenter)* (180 / pi);
angle2 = 360 - angle2;
}
else if (polygonList[compt]->centroid.datapointx < polygonList[compt2]->centroid.datapointx && polygonList[compt]->centroid.datapointy < polygonList[compt2]->centroid.datapointy) {
distCenterX = polygonList[compt2]->centroid.datapointx - polygonList[compt]->centroid.datapointx;
distCenterY = polygonList[compt2]->centroid.datapointy - polygonList[compt]->centroid.datapointy;
angle1 = acos(distCenterY / distCenter)* (180 / pi);
angle1 = 90 - angle1;
angle2 = acos(distCenterX / distCenter)* (180 / pi);
angle2 = angle2 + 180;
}
else if (polygonList[compt]->centroid.datapointx < polygonList[compt2]->centroid.datapointx && polygonList[compt]->centroid.datapointy > polygonList[compt2]->centroid.datapointy) {
distCenterX = polygonList[compt2]->centroid.datapointx - polygonList[compt]->centroid.datapointx;
distCenterY = polygonList[compt]->centroid.datapointy - polygonList[compt2]->centroid.datapointy;
angle1 = acos(distCenterY / distCenter)* (180 / pi);
angle1 = 360 - angle1;
angle2 = acos(distCenterX / distCenter)* (180 / pi);
angle2 = angle2 + 90;
}
else if (polygonList[compt]->centroid.datapointx > polygonList[compt2]->centroid.datapointx && polygonList[compt]->centroid.datapointy > polygonList[compt2]->centroid.datapointy) {
distCenterX = polygonList[compt]->centroid.datapointx - polygonList[compt2]->centroid.datapointx;
distCenterY = polygonList[compt]->centroid.datapointy - polygonList[compt2]->centroid.datapointy;
angle1 = acos(distCenterY / distCenter)* (180 / pi);
angle1 = angle1 + 180;
angle2 = acos(distCenterX / distCenter)* (180 / pi);
angle2 = 90 - angle2;
}
a1 = polygonList[compt]->dx / 2;
b1 = polygonList[compt]->dy / 2;
da1 = polygonList[compt]->dx;
db1 = polygonList[compt]->dy;
a2 = polygonList[compt2]->dx / 2;
b2 = polygonList[compt2]->dy / 2;
da2 = polygonList[compt2]->dx;
db2 = polygonList[compt2]->dy;
angle1 = angle1*(pi / 180);
angle2 = angle2*(pi / 180);
x1 = polygonList[compt]->centroid.datapointx + (a1 * cos(angle1));
y1 = polygonList[compt]->centroid.datapointy + (b1 * sin(angle1));
x2 = polygonList[compt2]->centroid.datapointx + (a2 * cos(angle2));
y2 = polygonList[compt2]->centroid.datapointy + (b2 * sin(angle2)); |
Partager