Разработка программы для определения принадлежности точки области, заключенной внутри трех окружностей попарно пересекающихся

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 13.01.2014
Размер файла 596,7 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Аннотация

В данной работе будет рассмотрен способ определения принадлежности некоторой точки (с координатами x, y) к некой заданной области.

Общие требования к курсовой работе:

1) Все задачи должны быть реализованы через функции.

2) Все функции должны иметь независимый интерфейс.

Исходные данные (x, y, x1, y1, R1, x2, y2, R2, x3, y3,R3) должны быть считаны с экрана.

Необходимо осуществить проверку исходных данных на соответствие варианту.

Содержание

  • Введение
  • Глава 1
    • 1.1 Постановка задачи
    • 1.2 Решение задачи
  • Глава 2
    • 2.1 Технические характеристики
    • 2.2 Описание алгоритма
    • 2.3 Описание структуры программы
    • 2.4 Инструкция пользователя
  • Заключение
  • Использованные источники

Введение

Целью данной курсовой работы является разработка рабочей программы для вычисления принадлежности точки заданной области.

Не всегда удобно делать вычисления вручную и нельзя при этом быть полностью уверенным в правильности своего решения. Именно поэтому электронные приложения намного удобнее и эффективнее.

Данное приложение актуально только для решения данной задачи, но т.к. его можно модифицировать, оно может быть полезно и для решения подобных.

Глава 1

1.1 Постановка задачи

При разработке приложения для вычисления принадлежности точки, главными задачами были:

1. Реализовать ввод данных;

2. Проверить корректность ввода данных;

3. Осуществить проверку условий: корректности ввода радиуса, условия попарного пересечения окружностей, принадлежности центров окружностей одной прямой и принадлежности точки области, заключенной внутри трех окружностей;

4. Разработать удобный интерфейс;

1.2 Решение задачи

Для решения задачи необходимо понять принцип построения.

Чтобы правильно решить задачу, необходимо правильно воспользоваться функцией. Функция для окружности:xІ + yІ = RІ, т.к. точка должна быть внутри окружности, то формула будет выглядеть: xІ + yІ <= RІ

Так как три окружности должны попарно пересекаться (обязательным условием считать, что ни одна окружность не должна лежать внутри другой), то должно выполняться условие, а прямая, на которой находятся центры, может быть под углом, то по теореме Пифагора находим кротчайшее расстояние между точками, т.е. гипотенузу:

корень из суммы квадратов разницы двух соседних центров окружностей [sqrt((y2-y1)*(y2-y1)+(x2-x1)*(x2-x1))] должен быть меньше суммы и больше модуля разности радиусов, рассматриваемых окружностей.

Рассмотрим второе условие: центры окружностей должны лежать на одной прямой, т.е. воспользуемся формулой

(y- y1)/(y2- y1) = (x- x1)/(x2- x1) =>

y3 = [(y2-y1)*(x3-x1)/(x2-x1)] + y1

Благодаря этой формуле будет осуществляться проверка третьих введенных данных, т.е. когда будут известны две другие точки (центры двух окружностей)

Далее необходимо ввести точку с координатами x, y, чтобы проверить их принадлежность к исследуемой области необходимо воспользоваться формулой, выведенной из общего уравнения окружности (Декартовы координаты):

(x - x1)І + (y - y1)І = R1І

yІ - 2*y*y1< = R1І- (x-x1)І

(соответственно вместо индекса 1 в программе также используются индексы 2 и 3).

Глава 2

2.1 Технические характеристики

Программа написана на языке программирования С++ в среде компилятора Visual Studio 2010.

Программа обладает рядом функциональных особенностей:

ь Удобство в использовании

ь Доступность для любого пользователя

2.2 Описание алгоритма

Для реализации алгоритма нахождения принадлежности были использованы переменные типа double.

Алгоритм:

1. Ввод переменных;

2. Проверка на соответствие вводных данных условиям задачи, если нет, то повторить шаг 1;

3. Ввод координат;

4. Проверка условий;

5. Вывод результата.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

2.3 Описание структуры программы

Используемые библиотеки: “stdafx.h”, <iomanip>, <math.h>, <iostream>;

Используемые функции:

Функции

Описание

void R0(double)

Проверяет значение каждого введенного радиуса. Радиус не должен быть меньше или равен нулю

bool intersection (double x1,double y1,double R1,double x2,double y2,double R2,double x3,double y3,double R3, bool f)

Определяет, происходит ли попарное пересечение

bool OneStraight (double x1,double y1,double R1,double x2,double y2,double R2,double x3,double y3,double R3, bool f)

Определяет, лежат ли центры окружностей на одной прямой

void if3(double x1,double y1,double R1,double x2,double y2,double R2,double x3,double y3,double R3,double x,double y)

Проверяет принадлежность введенной точки

double length (double, double, double, double)

Определяет длину между соседними центрами окружностей

2.4 Инструкция пользователя

При запуске программы

1) Последовательно введите координаты и центров окружностей и радиусы.

Рисунок 1. Последовательное введение координат и радиуса

2) Если радиус меньше или равен 0, введите новое значение

Рисунок 2. Ошибка ввода радиуса

3) Если появилась просьба повторного ввода координат центров окружностей и радиуса, значит, какое-то из условий не было выполнено, поэтому необходимо выполнить запрос.

Рисунок 3. Невыполнение условий. Просьба повторного ввода

Рисунок 4. Невыполнение условий. Просьба повторного ввода

4) Введите координаты точки, принадлежность которой надо определить.

Рисунок 5. Вывод результата

программа точка прямая окружность

Заключение

Во введении передо мной стояла задача разработки рабочей программы для вычисления принадлежности точки области, находящейся внутри трех окружностей, центры которых лежат на одной прямой.

Результатом данной курсовой работы является приложение, которое полностью удовлетворяет поставленным задачам. С его помощью можно определить принадлежность любой точки заданной области, т.е. области внутри трех попарно пересекающихся окружностей.

На основе курсовой работы можно сделать вывод, что приложение, разработанное в Visual Studio, позволяет создать удобный интерфейс для определения принадлежности точки области внутри трех окружностей.

В дальнейшем программу можно модифицировать и применять для других более сложных задач.

Преимуществом данного приложения является то, что с его помощью можно решить задачу, не затрачивая много времени.

Использованные источники

1) Декартовы координаты: сайт

Листинг программы

#include "stdafx.h"

#include <iostream>

#include <iomanip>

#include <math.h>

using namespace std;

void R0(double);

bool

intersection(double,double,double,double,double,double,double,double,doub

le,bool);

bool

OneStraight(double,double,double,double,double,double,double,double,dou

ble,bool);

void

belongs(double,double,double,double,double,double,double,double,double,d

ouble,double);

double length (double, double, double, double);

int main()

{

setlocale (LC_ALL, "Russian");

bool f=true;

double x1,y1,R1,x2,y2,R2,x3,y3,R3,x,y;

do

{

cout<<"Введите координаты центра первой окружности х1,у1:\n";

//printf("("); scanf("%lf", x1);printf(",");scanf("%lf",y1); printf(")\n");

cin>>x1>>y1;

cout<<"Введите радиус данной окружности "; cin>>R1;

R0(R1);

cout<<"Введите координаты центра второй окружности х2,у2:\n";

cin>>x2>>y2;

cout<<"Введите радиус данной окружности "; cin>>R2;

R0(R2);

cout<<"Введите координаты центра третьей окружности х3,у3:\n";

cin>>x3>>y3;

cout<<"Введите радиус данной окружности "; cin>>R3;

//y = [(y2-y1)*(x-x1)/(x2-x1)] + y1

R0(R3);

f= intersection(x1,y1,R1,x2,y2,R2,x3,y3,R3,f);

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

окружностей

if(!f) f= OneStraight(x1,y1,R1,x2,y2,R2,x3,y3,R3,f);

//определяет-находятся ли центры данных окружностей на одной

прямой

}while (f);

//проверка введенных данных)Теперь вводим данные. принадлежность

которых необходимо определить

cout<<"Введите х,у :\n"; cin>>x>>y;

belongs(x1,y1,R1,x2,y2,R2,x3,y3,R3,x,y);//принадлежность точки

return 0;

}

void R0(double r)

{

while (r<0)

{

cout<<"Радиус меньше нуля - ошибка!\nПожалуйста введите радиус

повторно\n";

cin>>r;

}

while (r==0)

{

cout<<"Радиус равен нулю - ошибка!\nПожалуйста введите радиус

повторно\n";

cin>>r;

}

}

double length(double y2, double y1, double x2,double x1)

{

return sqrt((y2-y1)*(y2-y1)+(x2-x1)*(x2-x1));

}

bool intersection(double x1,double y1,double R1,double x2,double

y2,double R2,double x3,double y3,double R3, bool f)

{

//закончить

if((length(y1,y2,x1,x2)<R1+R2)&&(length(y1,y2,x1,x2)>fabs(R1-

R2))&&(length(y3,y2,x3,x2)<R2+R3)&&(length(y3,y2,x3,x2)>fabs(R2-

R3)))

return false;

else

{

cout<<"Заданные окружности не пересекаются попарно\nВведите

данные повторно\n";

return true;

}

}

bool OneStraight(double x1,double y1,double R1,double x2,double

y2,double R2,double x3,double y3,double R3, bool f)

{

if((y3!=((y2-y1)*(x3-x1)/(x2-x1))+y1)&&(x2!=x1))

{

cout<<"Введенные точки не лежат на одной прямой\n Пожалуйста

введите данные повторно\n";

return true;

}

if((x2==x1)||(x2==x3)||(x3==x1))

{

cout<<"или х2=х1, или x2=x3, или x3=x1 т.е. знаменатель равен нулю-

ошибка\n Пожалуйста введите данные повторно\n";

return true;

}

return false;

}

void belongs(double x1,double y1,double R1,double x2,double y2,double

R2,double x3,double y3,double R3,double x,double y)

{

if((y*y-2*y*y1<=R1*R1-(x-x1)*(x-x1)-y1*y1)||(y*y-2*y*y2<=R2*R2-(x-

x2)*(x-x2)-y2*y2)||(y*y-2*y*y3<=R3*R3-(x-x3)*(x-x3)-y3*y3))

cout<<"Данная точка принадлежит заданной области"<<endl;

else cout<<"Данная точка не принадлежит заданной области"<<endl;

}

Размещено на Allbest.ru


Подобные документы

  • Написание алгоритма в среде Microsoft Foundation Classes, который приводит окружности к их перемещению слава направо с последующим появлением окружностей в левой части экрана, при достижении ими правой границы. Листинг и результаты работы программы.

    курсовая работа [294,2 K], добавлен 25.05.2015

  • Таблица тестовых наборов, код программы, скриншоты. Разработка программы вычисления заданного целочисленного выражения для данных в формате 16 бит. Вычисление принадлежности точки с заданными координатами заштрихованной области. Разветвления в С++.

    лабораторная работа [1,3 M], добавлен 23.11.2014

  • Разработка программы на языке Visual++ с использованием библиотеки MF, которая рассчитывает по введенным значениям длин сторон треугольника прямоугольный он или нет, а также вычисляет его периметр, площадь, радиус описанной и вписанной окружностей.

    курсовая работа [442,0 K], добавлен 18.06.2011

  • Разработка компоненты C++ Builder, состоящей из двух окружностей, одна из которых движется по периметру другой. Создание установочного пакета и тестового приложения с использованием разработанного компонента. Инсталляция и проверка готовой компоненты.

    курсовая работа [591,5 K], добавлен 05.12.2010

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

    дипломная работа [343,8 K], добавлен 06.06.2010

  • Основные правила нахождения монохромных изображений. Задача преобразования Хафа. Выделение кривых, образованных точками интереса. Выделение прямых и окружностей на изображении. Модификации преобразования Хафа. Вероятностное и случайное преобразование.

    презентация [127,4 K], добавлен 26.12.2012

  • Группы и назначение алгоритмов машинной графики верхнего и нижнего уровня. Учет свойств поверхности тела. Уравнения линий, эллипсов. Построение окружностей аппроксимацией отрезками. Отсечение нелицевых граней. Принципы построения полутоновых изображений.

    презентация [10,4 K], добавлен 14.08.2013

  • Метод установления границ начального отрезка локализации минимума. Метод золотого сечения. Оценивание точки минимума внутри найденного отрезка локализации. Программная реализация метода Свенна на языке C++. Текст программы нахождения точки минимума.

    контрольная работа [47,3 K], добавлен 27.01.2011

  • Существующие методы нахождения графических примитивов и программных реализаций. Базовое преобразование Хафа: поиск прямых, выделение окружностей на изображении, нахождение кривых высшего порядка. Составление руководства программиста и пользователя.

    курсовая работа [2,7 M], добавлен 20.03.2012

  • Понятие нечеткого множества и функции принадлежности. Методы дефаззификации (преобразования нечеткого множества в четкое число) для многоэкстремальных функций принадлежности. Нечеткий логический вывод. Примеры выпуклого и невыпуклого нечеткого множества.

    презентация [111,7 K], добавлен 16.10.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.