Найдите координаты точек B и D квадрата - C (СИ)
Формулировка задачи:
У квадрата ABCD, расположенного на плоскости, произвольно известны координаты двух противоположных вершин, точек А и С. Найдите координаты точек B и D.
Расположение квадрата произвольно, его стороны не обязательно параллельны координатным осям
Решение задачи: «Найдите координаты точек B и D квадрата»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <math.h> typedef struct _Point { double X; double Y; } Point; Point MakePoint(double x, double y) { Point p; p.X = x; p.Y = y; return p; } typedef struct _Vector { double X; double Y; } Vector; Vector MakeVector(double x, double y) { Vector p; p.X = x; p.Y = y; return p; } Vector MakeVector(Point begin, Point end) { Vector p; p.X = end.X - begin.X; p.Y = end.Y - begin.Y; return p; } double Dist(Vector v) { return sqrt(v.X * v.X + v.Y * v.Y); } void ToOne(Vector* v) { double d = Dist(*v); v->X /= d; v->Y /= d; } void Mul(Vector* v, double d) { v->X *= d; v->Y *= d; } typedef struct _Line { double A; double B; double C; } Line; Line MakeLine(Point p1, Point p2) { Line l; double x1 = p1.X, y1 = p1.Y, x2 = p2.X, y2 = p2.Y; double dx = x2 - x1; double dy = y2 - y1; l.A = dy; l.B = dx * (-1.0); l.C = dx * y1 - dy * x1; return l; } int main() { double ax, ay, cx, cy; scanf("%lf", &ax); scanf("%lf", &ay); scanf("%lf", &cx); scanf("%lf", &cy); Point A = MakePoint(ax, ay); Point C = MakePoint(cx, cy); Line AC = MakeLine(A, C); Point middle = MakePoint((ax + cx) * 0.5, (cy + ay) * 0.5); Vector ma = MakeVector(middle, A); Vector lv = MakeVector(AC.A, AC.B); ToOne(&lv); Mul(&lv, Dist(ma)); Point B = MakePoint(middle.X - lv.X, middle.Y - lv.Y); Point D = MakePoint(middle.X + lv.X, middle.Y + lv.Y); printf("B = (%lf %lf)\n", B.X, B.Y); printf("D = (%lf %lf)\n", D.X, D.Y); return 0; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Объявляем структуры для представления точек, векторов и линий
- Определяем функции для работы с точками, векторами и линиями
- В функции main() считываем координаты точек A и C
- Создаем объект Line AC, представляющий отрезок между точками A и C
- Находим середину отрезка AC и создаем объект Point middle
- Создаем вектор ma, направленный от точки middle к точке A
- Создаем вектор lv, равный вектору ma, умноженному на длину отрезка AC
- Переносим координаты точки B на экран
- Переносим координаты точки D на экран
- Возвращаем 0, чтобы указать, что программа успешно завершилась
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д