#include #include #include void prettyprint ( double A, double B, double C ) { if (A == 0) { printf("%lf y", B); } else { printf("%lf x", A); if (B > 0) printf(" + %lf y", B); else if (B < 0) printf(" - %lf y", -B); } if (C > 0) printf(" + %lf", C); else if (C < 0) printf(" - %lf", -C); printf(" = 0\n"); } int main () { double Ax, Ay, Bx, By, Cx, Cy, Dx, Dy; double m, l; double a, b, c, d; double S, T, U1, U2, V1, V2; double h, k, val1, val2, val3, val4; printf("Ax = "); scanf("%lf", &Ax); printf("Ay = "); scanf("%lf", &Ay); printf("Cx = "); scanf("%lf", &Cx); printf("Cy = "); scanf("%lf", &Cy); if ((Ax == Cx) && (Ay == Cy)) { printf("A and C must be two different points\n"); exit(1); } if (Ay == Cy) { Bx = Dx = (Ax + Cx) / 2; By = Ay + (Cx - Ax) / 2; Dy = Ay - (Cx - Ax) / 2; } else { m = (Ax - Cx) / (Cy - Ay); l = (Ay + Cy) / 2 - m * (Ax + Cx) / 2; a = 1 + m*m; b = -(Ax+Cx) + m*(2*l-(Ay+Cy)); c = (Ax+Cx)*(Ax+Cx)+(2*l-(Ay+Cy))*(2*l-(Ay+Cy)); c -= (Ax-Cx)*(Ax-Cx)+(Ay-Cy)*(Ay-Cy); c /= 4; d = sqrt(b*b - 4*a*c); Bx = (-b + d) / (2 * a); By = m * Bx + l; Dx = (-b - d) / (2 * a); Dy = m * Dx + l; } printf("The four corners of the square are:\n"); printf("\tA = (%lf,%lf)\n", Ax, Ay); printf("\tB = (%lf,%lf)\n", Bx, By); printf("\tC = (%lf,%lf)\n", Cx, Cy); printf("\tD = (%lf,%lf)\n", Dx, Dy); if (Ax == Bx) { S = 1; T = 0; } else if (Ay == By) { S = 0; T = 1; } else { S = (Ay - By) / (Bx - Ax); T = 1; } U1 = -(S * Ax + T * Ay); U2 = -(S * Dx + T * Dy); V1 = S * Ay - T * Ax; V2 = S * By - T * Bx; printf("The four sides of the square are:\n"); printf("\tAB: "); prettyprint(S, T, U1); printf("\tBC: "); prettyprint(T, -S, V2); printf("\tCD: "); prettyprint(S, T, U2); printf("\tDA: "); prettyprint(T, -S, V1); printf("Enter the coordinates of P:\n"); printf("\th = "); scanf("%lf", &h); printf("\tk = "); scanf("%lf", &k); val1 = S * h + T * k + U1; val2 = S * h + T * k + U2; val3 = T * h - S * k + V1; val4 = T * h - S * k + V2; if ((val1 * val2 > 0) || (val3 * val4 > 0)) printf("+++ P lies outside the square\n"); else if ((val1 * val2 < 0) && (val3 * val4 < 0)) printf("+++ P lies inside the square\n"); else printf("+++ P lies on the boundary of the square\n"); exit(0); }