Меню сайта
Наш опрос
Оцените мой сайт
Всего ответов: 5
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Главная » 2014 » Июль » 22 » Положение двух точек относительно прямой
15:23
Положение двух точек относительно прямой

Поводом для написания этой статьи стала эта тема на форуме. Вопрос довольно простой, но мне показалось, что он заслуживает освещения в цикле, посвящённом применению математики в программировании.Итак, дано: уравнение прямой, две точки, не лежащие на этой прямой. Требуется определить, лежат ли точки по одну сторону от прямой или по разные.Где может понадобится решение подобной задачи? Представьте, вы пишите стратегическую игру. Два юнита находятся по разные стороны реки. Пользователь выделяет их обоих, и заставляет куда-то идти. И тут нужно определить, смогут ли оба юнита пройти туда, куда велит пользователь. Стало интереснее?Итак, набросаем небольшой рисунок.У нас есть точки A, B и C. B и C лежат по одну сторону от прямой, а A по другую.Для того, чтобы проверить, лежат ли две точки по одну сторону от прямой или нет нужно спроецировать эти точки на прямую линией, параллельной оси OY. Затем сравнить ординаты определяемых точек с ординатами полученных. Если оба отношения будут идентичными, то точки лежат с одной стороны, иначе - с разных.Поробуем это запрограммировать.#include <iostream>class CFunction{public: CFunction(double a, double b) : m_a(a), m_b(b) { } double Run(double x) { return m_a * x + m_b; } private: double m_a; double m_b;};struct CPoint{ double m_x; double m_y;};int main(){ CPoint point_a; CPoint point_b; double a; double b; std::cout << "y = ax + b.\nEnter the a value: "; std::cin >> a; std::cout << "Enter the b value: "; std::cin >> b; std::cout << "Point A.\nEnter the X coord: "; std::cin >> point_a.m_x; std::cout << "Enter the Y coord: "; std::cin >> point_a.m_y; std::cout << "Point B.\nEnter the X coord: "; std::cin >> point_b.m_x; std::cout << "Enter the Y coord: "; std::cin >> point_b.m_y; CFunction function(a, b); bool a_up = function.Run(point_a.m_x) > point_a.m_y; bool b_up = function.Run(point_b.m_x) > point_b.m_y; if(a_up Points lie on one side\n"; } else { std::cout << "Points lie on different sides\n"; }}Здесь я ввёл класс, соответствующий линейной функции и структуру для описания точки. Ничего сложного. Далее, как уже говорилось, берём ординаты из функции, соответствующие абсциссам точкек и сравниваем их с ординатами точек. Проверяем результаты. Если они идентичны, выдаём сообщение о том, что точки лежат с одной стороны прямой, иначе сообщаем о том, что точки находятся по разные стороны прямой.


клуб поло седан
Просмотров: 213 | Добавил: admin | Рейтинг: 0.0/0
Всего комментариев: 0
avatar
Форма входа
Календарь
«  Июль 2014  »
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
28293031
Архив записей