Добавил:
vvrstcnho
Рад, если кому-то помог
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторные работы С++ (для ИВТ) / Готовые лабы С++ / Лаба1 / Laba 1 (13)
.cpp#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
