Найдите координаты точек 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;
}

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы
  2. Объявляем структуры для представления точек, векторов и линий
  3. Определяем функции для работы с точками, векторами и линиями
  4. В функции main() считываем координаты точек A и C
  5. Создаем объект Line AC, представляющий отрезок между точками A и C
  6. Находим середину отрезка AC и создаем объект Point middle
  7. Создаем вектор ma, направленный от точки middle к точке A
  8. Создаем вектор lv, равный вектору ma, умноженному на длину отрезка AC
  9. Переносим координаты точки B на экран
  10. Переносим координаты точки D на экран
  11. Возвращаем 0, чтобы указать, что программа успешно завершилась

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4 из 5
Похожие ответы