Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Результаты опроса: Как лучше?
Никак 0 0%
Забыть 0 0%
Голосовавшие: 0. Вы ещё не голосовали в этом опросе

Ответ
 
Опции темы Поиск в этой теме
Старый 28.01.2012, 19:13   #1
MorninG
Новичок
Джуниор
 
Регистрация: 06.05.2011
Сообщений: 2
По умолчанию Принадлежность точки с заданными координатами

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

Вот задание:
Разработать алгоритм и написать программу вычисления логического выражения принадлежности точки с заданными координатами (x, y) заштрихованной области. Значения координат x, y вводятся с клавиатуры с проверкой фактического их восприятия ЭВМ. Программа должна выдавать 1, если точка попадает в область, и 0 — в противном случае.
(http://i061.radikal.ru/1201/fe/800745dc822c.png)

Так сделал я. Кто может по-другому? Желательно более интересные методы

Код:
#include <iostream>

using namespace std;

int main()
{
	float x,y;
	
	cout<<"Input x number-->";
	cin>>x;
	cout<<"Input y number-->";
	cin>>y;

	if((x<-4) || (y<0) || (x>4) || (y>4)) 
	{
		cout<<"0"<< endl;
		return 0;
	}
	if(x < 0)
	{
		x*=-1;
	}
	if((x + y) > 4)
	{
		cout<<"0"<< endl;
		return 0;
	}

	else
	{
		cout<<"1" << endl;
	}
}

Последний раз редактировалось ACE Valery; 29.01.2012 в 02:24.
MorninG вне форума Ответить с цитированием
Старый 28.01.2012, 23:18   #2
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

слышал про два метода

один для произвольной многосвязной области. из тестовой точки выпускается луч на бесконечность и считается количество раз, когда луч пересекает границу области. четное кол-во = не попал

второй для произвольной многосвязной области с заданным напралением обхода границы. определяется в каком отношении к границе находится тестовая точка: правовитовом или левовинтовом. (правинтовой == направление обхода границы) = попал.
f.hump вне форума Ответить с цитированием
Старый 29.01.2012, 00:18   #3
MooNDeaR
В стагнации
Участник клуба
 
Аватар для MooNDeaR
 
Регистрация: 29.07.2011
Сообщений: 1,303
По умолчанию

Цитата:
один для произвольной многосвязной области. из тестовой точки выпускается луч на бесконечность и считается количество раз, когда луч пересекает границу области. четное кол-во = не попал
Сомнительный метод какой-то выходит. А если луч прошел по касательной к области? получается пересек-то один раз, а задача решена неправильно.

Вопрос в ТС. Нафига козе баян? Сложные математические способы я думаю понадобятся, если собираетесь определять положение точки в неком n-мерном пространстве только.
E-mail: pashaworking@gmail.com | ICQ: 479914426 | Skype: moondearr
Понять, чего от тебя требует заказчик – это уже половина всей работы, а иногда и полностью выполненное задание.
MooNDeaR вне форума Ответить с цитированием
Старый 29.01.2012, 01:28   #4
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

Цитата:
Сомнительный метод какой-то выходит.
никто не спорит, оба метода имеют свои недостатки. основная сложность при реализации как раз и заключатся в решении вырожденных ситуаций.
f.hump вне форума Ответить с цитированием
Старый 29.01.2012, 02:38   #5
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

MorninG

Интересуют другие методы решения данной задачки.

Ну, другие так другие... oO

Код:
#include <boost/polygon/polygon.hpp>
namespace gtl = boost::polygon;

typedef gtl::polygon_data<float> Polygon;
typedef gtl::polygon_traits<Polygon>::point_type Point;

bool is_point_in_triangle(Point p, Point p1, Point p2, Point p3)
{
    const Point pts[] = { p1, p2, p3 };

    Polygon tri;
    gtl::set_points(tri, pts, pts + _countof(pts));

    return gtl::contains(tri, p);
}
Rififi вне форума Ответить с цитированием
Старый 29.01.2012, 11:58   #6
MorninG
Новичок
Джуниор
 
Регистрация: 06.05.2011
Сообщений: 2
По умолчанию

Цитата:
Сообщение от Rififi Посмотреть сообщение
MorninG

Интересуют другие методы решения данной задачки.

Ну, другие так другие... oO

Код:
#include <boost/polygon/polygon.hpp>
namespace gtl = boost::polygon;

typedef gtl::polygon_data<float> Polygon;
typedef gtl::polygon_traits<Polygon>::point_type Point;

bool is_point_in_triangle(Point p, Point p1, Point p2, Point p3)
{
    const Point pts[] = { p1, p2, p3 };

    Polygon tri;
    gtl::set_points(tri, pts, pts + _countof(pts));

    return gtl::contains(tri, p);
}
Спасибо Осталось только разобраться! :D
MorninG вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определить принадлежность точки с координатами (x,y) volk_102 Помощь студентам 1 02.12.2011 10:03
Массив RGB значений области экрана с заданными координатами Vet Помощь студентам 2 17.07.2011 22:47
попадет ли точка с заданными координатами в заштрихованную область на рисунке (Паскаль) arshavin Помощь студентам 5 05.04.2011 18:51
принадлежность точки с координатами (х, у)заштрихованой области ilgiz667 Общие вопросы C/C++ 4 01.12.2010 13:28
определить, попадет ли точка с заданными координатами в область, закрашенную красным цветом Ксенька89 Помощь студентам 8 25.05.2009 22:45