Программирование геометрических объектов на плоскоти — КиберПедия 

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

Программирование геометрических объектов на плоскоти

2017-06-05 833
Программирование геометрических объектов на плоскоти 0.00 из 5.00 0 оценок
Заказать работу

Разработать ООП для поиска точек Сх и Сy осей координат, которые находятся на минимальном расстоянии от пары заданных точек A и B плоскости XY. Координаты пары заданных точек A и B должны передаваться программе через поток стандартного ввода. Искомые точки Сх и Сy образуют пересечения с осями координат либо отрезка AB, либо отрезка с симметричным отражением точки A или B относительно оси, которую отрезок AB не пересекает. Координаты полученных точек Сх и Сy должны отображаться через поток стандартного вывода. Программная реализация этих геометрических построений должна быть основана на разработке композитного класса отрезка прямой. Его приватные данные должны вллючать подобъекты класса точки для концов отрезка, а публичные методы должны обеспечивать построение точек пересечения отрезка с осями координат. Конструкторы классов отрезка и точки должны использовать списки инициализации своих приватных данных. Необходимо также предусмотреть перегрузку операторов ввода-вывода точек и обеспечить доступ к их приватным координатам.

 

//Минимальное расстояние пары точек плоскости от осей координат

include <iostream>//заголовок потоков ввода-вывода

using namespace std; //разрешить доступ к стандартному пространству имен

class Line; //превентивное объявление класса отрезка прямой линии

class Dot {//декларация класса точки

friend class Line; //разрешить доступ в Line к приватным данным Dot

friend istream& operator>>(istream&, Dot&);//перегрузка оператора ввода

friend ostream& operator<<(ostream&, Dot&);// перегрузка оператора вывода

private:

float x; //координата точки по оси X

float y; // координата точки по оси Y

public:

Dot(float xx=0.0, float yy=0.0): x(xx), y(yy) { };//конструктор //точки

// Dot(Dot& p) { x=p.x; y=p.y; };

float getx() { return x; };//получить координату точки по оси X

float gety() { return y; };// получить координату точки по оси Y

Dot symx() { return Dot(-x, y); };//отразить точку относительно оси Y

Dot symy() { return Dot(x, -y); };// отразить точку относительно оси X

}; // Dot

class Line {// декларация класса отрезка линии

private:

Dot p1; //начальная точка отрезка

Dot p2; //конечная точка отрезка

public:

Line(Dot& p, Dot& q): p1(p), p2(q) {};// конструктор отрезка по двум //точкам

Line(float x1, float y1, float x2, float y2): p1(x1,y1), p2(x2,y2) {};// конструктор //отрезка по координатам точек его концов

Dot clipx();//отсечение отрезка осью X

Dot clipy();//отсечение отрезка осью Y

}; // Line

//пересечение отрезка (y-y2)(x1-x2)=(y1-y2)(x-x2) и прямой y=0 (ось X)

Dot Line::clipx() {

float dx = p2.x - p1.x; //разность координат концов отрезка по оси X

float dy = p1.y - p2.y; // разность координат концов отрезка по оси Y

float x0 = (p2.y * dx)/dy + p2.x; //отсечение по X

return Dot(x0, 0.0); //возврат точки пересечения отрезка с осью X

} // clipx()

//пересечение отрезка (y-y2)(x1-x2)=(y1-y2)(x-x2) и прямой x=0 (ось Y)

Dot Line::clipy() {

float dx = p2.x - p1.x; //разность координат концов отрезка по оси X

float dy = p1.y - p2.y; // разность координат концов отрезка по оси Y

float y0 = (p2.x * dy)/dx + p2.y; //возврат точки пересечения отрезка с осью Y

return Dot(0.0, y0); //возврат точки пересечения отрезка с осью Y

} // clipy()

//дружественная перегрузка оператора стандартного ввода точки

istream& operator>>(istream& input, Dot& p) {

char semicolon;; //символ(;) разделения координат при вводе

input >> p.x >> semicolon >> p.y; //ввод пары координат точки

return input; //возврат ссылки на объект потока ввода

} // >>operator>>()

//дружественная перегрузка оператора стандартного вывода точки

ostream& operator<<(ostream& output, Dot& p) {

char semicolon =; //символ(;) разделения координат при выводе

output << p.x << semicolon << p.y; //вывод пары координат точки

return output; //возврат ссылки на объект потока вывода

} // << operator<<()

int main() {//основная функция

Dot A, B, _A, _B, C; //объекты для пары задаваемых точек

float xa, ya, xb, yb, _x, _y;

cout << "Input xa;ya xb;yb or exit" << endl; //запрос ввода координат пары точек

while(cin >> A >> B) {//цикл ввода и обработки точек

//поиск точки оси Х, ближайшей к заданным точкам А и В

ya = A.gety();

yb = B.gety();

//отражение т.А относительно оси Х, когда А и В обе выше или ниже оси Х

_A = (ya * yb) > 0? A.symy(): A;

Line lx(_A, B); //построение отрезка_АВ,пересекающего ось Х

C = lx.clipx(); //точка пересечения отрезка_АВ с осью Х

cout << C << endl; //вывод координат полученной точки на оси Х

//поиск точки оси Y, ближайшей к заданным точкам А и В

xa = A.getx();

xb = B.getx();

_x = (xa*xb > 0)? -xb: xb; //отражение т.А относительно оси

// Y, когда А и В обе выше или ниже оси Y

Line ly(xa, ya, _x, yb); //построение отрезка_АВ, пересекающего ось Y

C = ly.clipy();//точка пересечения отрезка_АВ с осью Y

cout << C << endl; //вывод координат полученной точки на оси Y

cout << "Input xa;ya xb;yb or exit" << endl;

} // while

return(0); //завершение программы

} // main

Варианты заданий для пятой лабораторной работы

--------------------------------------------------------------------------------------------------------------------

Разработать объектно-ориентированную программу для вычисления длины любых отрезков прямых линий. Отрезки должны задаваться парами координат своих концов на плоскости через поток стандартного ввода. Результат вычисления длины каждого заданного отрезка должен отображаться через поток стандартного вывода. Программная реализация этих вычислений должна быть основана на разработке контейнерного класса отрезка прямой. Его компонентные данные должны включать подобъекты класса точки для хранения координат концов отрезка, а компонентный метод должен обеспечивать вычисление длины отрезка по ним. Конструкторы классов отрезка и точки должны использовать списки инициализации своих компонентных данных.

K1

--------------------------------------------------------------------------------------------------------------------

Разработать объектно-ориентированную программу для деления на 2 равные части отрезков прямых линий. Отрезки должны задаваться парами координат своих концов на плоскости через поток стандартного ввода. Результат вычисления координат центра каждого заданного отрезка должен отображаться через поток стандартного вывода. Программная реализация этих вычислений должна быть основана на разработке контейнерного класса отрезка прямой линии. Его компонентные данные должны включать подобъекты класса точки для хранения координат концов отрезка, а компонентный метод должен определять середину отрезка по ним. Конструкторы классов отрезка и точки должны использовать списки инициализации своих компонентных данных.

K2

--------------------------------------------------------------------------------------------------------------------

Разработать объектно-ориентированную программу для деления отрезков прямых линий на 2 части в пропорциях золотого сечения. Отрезки должны задаваться парами координат своих концов на плоскости в строках потока стандартного ввода. Результат вычисления координат золотого сечения каждого заданного отрезка должен отображаться через поток стандартного вывода. Программная реализация этих вычислений должна быть основана на разработке контейнерного класса отрезка прямой линии. Его компонентные данные должны включать подобъекты класса точки для хранения координат концов отрезка, а компонентный метод должен строить золотое сечение отрезка по ним. Конструкторы классов отрезка и точки должны использовать списки инициализации своих компонентных данных.

K3

--------------------------------------------------------------------------------------------------------------------

Разработать объектно-ориентированную программу для деления отрезков прямых линий на 2 части в отношении, указанном аргументом командной строки ее вызова. Отрезки должны задаваться парами координат своих концов на плоскости через поток стандартного ввода. Координаты точки деления каждого заданного отрезка должны отображаться через поток стандартного вывода. Программная реализация этих вычислений должна быть основана на разработке контейнерного класса отрезка прямой линии. Его компонентные данные должны включать подобъекты класса точки для хранения координат концов отрезка, а компонентный метод должен делить отрезок в заданном отношении. Конструкторы классов отрезка и точки должны использовать списки инициализации своих компонентных данных.

K4

--------------------------------------------------------------------------------------------------------------------

Разработать объектно-ориентированную программу поиска точек отрезков прямых линий на плоскости XY, которые имеют обе целочисленные координаты. Отрезки должны задаваться парами координат своих концов в строках потока стандартного ввода. Пары целочисленных координат точек каждого заданного отрезка должны отображаться через поток стандартного вывода. Программная реализация поиска должна основываться на разработке контейнерного класса отрезка. Его компонентные данные должны включать подобъекты класса точки для координат концов отрезка, а компонентный метод должен перечислять все целочисленные точки отрезка в порядке увеличения координаты X. Конструкторы классов отрезка и точки должны использовать инициализаторы своих компонентных данных.

K5

--------------------------------------------------------------------------------------------------------------------

Разработать объектно-ориентированную программу поиска точек отрезков прямых линий на плоскости XY, которые имеют обе целочисленные координаты. Отрезки должны задаваться парами координат своих концов в строках потока стандартного ввода. Пары целочисленных координат точек каждого заданного отрезка должны отображаться через поток стандартного вывода. Программная реализация поиска должна основываться на разработке контейнерного класса отрезка. Его компонентные данные должны включать подобъекты класса точки для координат концов отрезка, а компонентный метод должен перечислять все целочисленные точки отрезка в порядке увеличения координаты Y. Конструкторы классов отрезка и точки должны использовать инициализаторы своих компонентных данных.

K6

--------------------------------------------------------------------------------------------------------------------

Разработать объектно-ориентированную программу поиска точек отрезков прямых линий на плоскости XY, которые имеют обе целочисленные координаты. Отрезки должны задаваться парами координат своих концов в строках потока стандартного ввода. Пары целочисленных координат точек каждого заданного отрезка должны отображаться через поток стандартного вывода. Программная реализация поиска должна основываться на разработке контейнерного класса отрезка. Его компонентные данные должны включать подобъекты класса точки для координат концов отрезка, а компонентный метод должен перечислять все целочисленные точки отрезка в порядке уменьшения координаты Y. Конструкторы классов отрезка и точки должны использовать инициализаторы своих компонентных данных.

K7

--------------------------------------------------------------------------------------------------------------------

Разработать объектно-ориентированную программу поиска точек отрезков прямых линий на плоскости XY, которые имеют обе целочисленные координаты. Отрезки должны задаваться парами координат своих концов в строках потока стандартного ввода. Пары целочисленных координат точек каждого заданного отрезка должны отображаться через поток стандартного вывода. Программная реализация поиска должна основываться на разработке контейнерного класса отрезка. Его компонентные данные должны включать подобъекты класса точки для координат концов отрезка, а компонентный метод должен перечислять все целочисленные точки отрезка в порядке уменьшения координаты X. Конструкторы классов отрезка и точки должны использовать инициализаторы своих компонентных данных.

K8

--------------------------------------------------------------------------------------------------------------------

Разработать объектно-ориентированную программу для вычисления следа на вертикальной оси координат и коэффициента углового наклона прямых линий. Каждая прямая линия должна задаваться парами координат двух своих точек в строках потока стандартного ввода. Результаты вычислений наклона и следа каждой прямой должны отображаться через поток стандартного вывода. Программная реализация этих вычислений должна быть основана на разработке контейнерного класса прямой линии. Его компонентные данные должны быть подобъекты класса точки для координат двух точек прямой, а компонентные методы должны вычислять значения ее наклона и следа по ним. Конструкторы классов прямой линии и точки должны использовать списки инициализации своих компонентных данных.

K9

--------------------------------------------------------------------------------------------------------------------

Разработать объектно-ориентированную программу для вычисления значений следа прямых линий на осях координат. Каждая прямая линия должна задаваться парами координат двух своих точек на плоскости через поток стандартного ввода. Результаты вычислений следов каждой прямой на осях координат должны отображаться через поток стандартного вывода. Программная реализация вычислений должна быть основана на разработке контейнерного класса прямой линии. Его компонентные данные должны включать подобъекты класса точки для хранения координат двух точек прямой, а компонентные методы должны вычислять значения ее следов на осях координат. Конструкторы классов прямой линии и точки должны использовать списки инициализации своих компонентных данных.

K10

--------------------------------------------------------------------------------------------------------------------

Разработать объектно-ориентированную программу вычисления коэффициентов уравнения AX+BY+C=0 для прямых линий, заданных координатами двух своих точек на плоскости XY. Координаты пар точек должны передаваться программе через поток стандартного ввода. Записи уравнений прямых по ним должны отображаться в строках потока стандартного вывода. Программная реализация вычислений их коэффициентов должна быть основана на разработке контейнерного класса прямой линии. Его компоненты-данные должны включать подобъекты класса точки для координат двух точек прямой, а компонентные методы должны вычислять коэффициенты для ее уравнения. Конструкторы классов прямой линии и точки должны использовать списки инициализации своих компонентных данных.

K11

--------------------------------------------------------------------------------------------------------------------

Разработать объектно-ориентированную программу вычисления расстояний любых прямых линий на плоскости от начала координат. Каждая прямая линия должна задаваться парами координат двух своих точек через поток стандартного ввода. Результирующая величина ее расстояния от начала координат должна отображаться строкой потока стандартного ввода. Программная реализация вычислений этих расстояний должна быть основана на разработке контейнерного класса прямой линии. Его компоненты-данные должны включать подобъекты класса точки для координат двух точек прямой, а компонентный метод должен вычислять по ним ее расстояние от начала координат. Конструкторы классов прямой линии и точки должны использовать списки инициализации своих компонентных данных.

K12

--------------------------------------------------------------------------------------------------------------------

Разработать объектно-ориентированную программу вычисления периметров треугольников, которые задаются координатами вершин на плоскости. Координаты вершин треугольников должны передаваться программе строками потока стандартного ввода. Значения периметров соответствующих треугольников должны отображаться через поток стандартного вывода. Программная реализация вычислений должна быть основана на разработке контейнерного класса треугольника. Его компонентные данные должны включать подобъекты класса точки для координат вершин треугольника, а компонентный метод должен вычислять по ним периметр треугольника. Конструкторы классов треугольника и точки должны использовать списки инициализации своих компонентных данных.

K13

--------------------------------------------------------------------------------------------------------------------

Разработать объектно-ориентированную программу вычисления площадей треугольников, которые задаются координатами вершин на плоскости. Координаты вершин треугольников должны передаваться программе строками потока стандартного ввода. Значения площади соответствующих треугольников должны отображаться через поток стандартного вывода. Программная реализация вычислений должна быть основана на разработке контейнерного класса треугольника. Его компонентные данные должны включать подобъекты класса точки для координат вершин треугольника, а компонентный метод должен вычислять по ним площадь треугольника. Конструкторы классов треугольника и точки должны использовать списки инициализации своих компонентных данных.

К14

--------------------------------------------------------------------------------------------------------------------

Разработать объектно-ориентированную программу для вычисления радиуса окружности, вписанной в любой треугольник, заданный координатами своих вершин на плоскости. Эти координаты должны передаваться программе строками потока стандартного ввода. Значения радиуса вписанной окружности для каждого заданного треугольника должно отображаться в потоке стандартного вывода. Программная реализация вычислений должна быть основана на разработке контейнерного класса треугольника. Его компоненты-данные должны включать подобъекты класса точки для координат вершин треугольника, а его компонентный метод должен вычислять радиус вписанной окружности. Конструкторы классов треугольника и точки должны использовать списки инициализации компонентных данных.

К15

--------------------------------------------------------------------------------------------------------------------

Разработать объектно-ориентированную программу для вычисления радиуса окружности, в которую вписывается треугольник, заданный координатами своих вершин на плоскости. Эти координаты должны передаваться программе строками потока стандартного ввода. Значения радиуса описанной окружности для каждого заданного треугольника должно отображаться в потоке стандартного вывода. Программная реализация вычислений должна быть основана на разработке контейнерного класса треугольника. Его компоненты-данные должны включать подобъекты класса точки для координат вершин треугольника, а его компонентный метод должен вычислять радиус описанной окружности. Конструкторы классов треугольника и точки должны использовать списки инициализации компонентных данных.

К16

--------------------------------------------------------------------------------------------------------------------

Разработать объектно-ориентированную программу вычисления длины медиан для любых треугольников, которые задаются координатами вершин на плоскости. Координаты вершин треугольников должны передаваться программе строками потока стандартного ввода. Длины медиан для каждого заданного треугольника должны отображаться через поток стандартного вывода. Программная реализация этих вычислений должна быть основана на разработке контейнерного класса треугольника. Его компоненты-данные должны включать подобъекты класса точки для хранения координат вершин треугольника, а компоненты-методы должны вычислять длину медиан треугольника. Конструкторы классов треугольника и точки должны использовать списки инициализации компонентных данных.

К17

--------------------------------------------------------------------------------------------------------------------

Разработать объектно-ориентированную программу для вычисления длины биссектрис углов треугольников, которые задаются координатами вершин на плоскости. Координаты вершин треугольников должны передаваться программе строками потока стандартного ввода. Длины биссектрис углов заданных треугольников должны отображаться через поток стандартного вывода. Программная реализация этих вычислений должна быть основана на разработке контейнерного класса треугольника. Его компоненты-данные должны включать подобъекты класса точки для хранения координат вершин треугольника, а компоненты-методы должны вычислять длины биссектрис углов. Конструкторы классов треугольника и точки должны использовать списки инициализации компонентных данных.

К18

--------------------------------------------------------------------------------------------------------------------

Разработать объектно-ориентированную программу для вычисления длины высот в любых треугольниках, которые задаются координатами вершин на плоскости. Координаты вершин треугольников должны передаваться программе строками потока стандартного ввода. Длины высот для каждого заданного треугольника должны отображаться через поток стандартного вывода. Программная реализация этих вычислений должна быть основана на разработке контейнерного класса треугольника. Его компоненты-данные должны включать подобъекты класса точки для хранения координат вершин треугольника, а компоненты-методы должны вычислять длину высот треугольника. Конструкторы классов треугольника и точки должны использовать списки инициализации компонентных данных.

К19

--------------------------------------------------------------------------------------------------------------------

Разработать объектно-ориентированную программу для определения углов треугольников, которые задаются координатами вершин на плоскости. Координаты вершин треугольников должны передаваться программе строками потока стандартного ввода. Значения углов для каждого заданного треугольника должны отображаться через поток стандартного вывода. Программная реализация вычислений должна быть основана на разработке контейнерного класса треугольника. Его компоненты-данные должны включать подобъекты класса точки для хранения координат вершин треугольника, а компонентные методы должны определять по ним значения углов треугольника. Конструкторы классов треугольника и точки должны использовать списки инициализации компонентных данных.

К20

--------------------------------------------------------------------------------------------------------------------

Одиночное наследование

Правила наследования

Наследование является одним из трех основных механизмов языка ООП [5]. В результате использования механизма наследования осуществляется формирование иерархических связей между описываемыми типами. Тип-наследник уточняет базовый тип.

Прототип объявления типа-наследника:

При наследовании наследуются не только информационные члены, но и методы класса [5,8-9]. Однако конструкторы, деструктор и операция присваивания не наследуются.

Единственный способ использования конструктора базового класса – список инициализации. Он записывается при описании конструктора производного класса:

При создании объекта производного типа сначала будет вызван конструктор базового типа. При этом если конструктору базового типа нужны параметры, то его необходимо вызывать явно в списке инициализации. Затем будет вызван конструктор производного класса.

Деструкторы вызываются в обратном порядке. При разрушении объекта производного типа сначала будет вызван деструктор этого типа, а затем деструктор базового типа.

Допустимо присвоение объекту базового типа объекта производного типа. При этом объекту базового типа будет присвоена та часть объекта производного типа, которая структурно совпадает с базовым типом.


Поделиться с друзьями:

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...

Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.062 с.