Добавил:
Рад, если кому-то помог Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
0
Добавлен:
01.11.2025
Размер:
2.97 Кб
Скачать
#include <iostream>
#include <cmath>
#include <windows.h>
using namespace std;

const double PI = 3.14159265358979323846;

class Segment {
private:
    double x1, y1, x2, y2;
    
public:
    void input() {
        cout << "Введите координаты первого конца отрезка:" << endl;
        cout << "x1 = ";
        cin >> x1;
        cout << "y1 = ";
        cin >> y1;
        cout << "Введите координаты второго конца отрезка:" << endl;
        cout << "x2 = ";
        cin >> x2;
        cout << "y2 = ";
        cin >> y2;
    }
    
    void display() {
        cout << "Отрезок от (" << x1 << ", " << y1 
             << ") до (" << x2 << ", " << y2 << ")" << endl;
    }
    
    void findMidpoint() {
        double midX = (x1 + x2) / 2;
        double midY = (y1 + y2) / 2;
        cout << "Середина отрезка: (" << midX << ", " << midY << ")" << endl;
        cout << "Символ с кодом 002 в середине: ☻" << endl;
    }
    
    void rotate(double angle) {
        double centerX = (x1 + x2) / 2;
        double centerY = (y1 + y2) / 2;
        
        double angle_rad = angle * PI / 180.0;
        double cos_a = cos(angle_rad);
        double sin_a = sin(angle_rad);
        
        // Переносим систему координат в центр отрезка
        double x1_rel = x1 - centerX;
        double y1_rel = y1 - centerY;
        double x2_rel = x2 - centerX;
        double y2_rel = y2 - centerY;
        
        // Поворачиваем
        double x1_new = x1_rel * cos_a - y1_rel * sin_a;
        double y1_new = x1_rel * sin_a + y1_rel * cos_a;
        double x2_new = x2_rel * cos_a - y2_rel * sin_a;
        double y2_new = x2_rel * sin_a + y2_rel * cos_a;
        
        // Возвращаем в исходную систему координат
        x1 = x1_new + centerX;
        y1 = y1_new + centerY;
        x2 = x2_new + centerX;
        y2 = y2_new + centerY;
        
        cout << "Отрезок повернут на " << angle << "° относительно центра" << endl;
    }
    
    void getCoordinates(double &x1_out, double &y1_out, double &x2_out, double &y2_out) {
        x1_out = x1; y1_out = y1;
        x2_out = x2; y2_out = y2;
    }
};

int main() {
    SetConsoleOutputCP(65001);
    
    Segment s;
    
    cout << "=== Работа с отрезком ===" << endl;
    s.input();
    
    cout << "\nИсходный отрезок:" << endl;
    s.display();
    
    cout << "\nНахождение середины:" << endl;
    s.findMidpoint();
    
    cout << "\nПоворот отрезка:" << endl;
    s.rotate(45);
    s.display();
    
    cout << "\nЕще один поворот:" << endl;
    s.rotate(90);
    s.display();
    
    return 0;
}
Соседние файлы в папке Лаба1