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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2010, 18:40   #1
AnDre_rus
 
Регистрация: 19.10.2010
Сообщений: 8
Стрелка Проверка положения точки относительно треугольника

Здравствуйте!

Очень срочно потребовалась функции, которая бы определяла находится точка внутри треугольника или нет.

На вход подаются координаты точки и координаты трёх точек, задающих треугольник, на выходе значение 1 или 0 в зависимости от того, входит или не входит точка в треугольник, соответственно.

помогите, пожалуйста, написать корректно работающую функцию.
пробовал писать через площади, но какие то траблы, считает не верно.
AnDre_rus вне форума Ответить с цитированием
Старый 11.11.2010, 19:27   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Площадь треугольника, построенного на векторах (Xa, Ya) (Xb, Yb):
Код:
S = 0.5*(Xa*Yb - Ya*Xb), где Xa, Ya, Xb, Yb - проекции векторов на оси X и Y.
Формула простая, дальнейшие вычисления тоже особых проблем не представляют. Если все равно будет неверно считать - выкладывайте код, посмотрим.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 12.11.2010, 19:38   #3
WOWka777
Пользователь
 
Регистрация: 21.10.2008
Сообщений: 37
По умолчанию

Код:
void main(){
setlocale(LC_CTYPE,"russian");
float ax,bx,cx,tx,ay,by,cy,ty,pm=0,p;
cout<<"Программа определяет принадлежность точки заданной области";
while(1){
p=vvod(ax,bx,cx,ay,by,cy,tx,ty);
pm+=ploshad(tx,bx,cx,ty,by,cy);
pm+=ploshad(ax,tx,cx,ay,ty,cy);
pm+=ploshad(ax,bx,tx,ay,by,ty);
p=floor(p);
pm=floor(pm);
if (pm == p)
	 cout<<endl<<"Точка принадлежит данной области"<<endl; 
	else
	cout<<endl<<"Точка не принадлежит данной области!"<<endl; 
  cout<<endl<<"Для выхода из программы нажмите ctrl+z enter "<<endl
	<<"Если вы хотите выполнить программу заного введите любое число "; 
     prk();
	 system("cls");
}
getch();
}
float ploshad(float ax,float bx,float cx,float ay,float by,float cy)
{ float d1,d2,d3,per;
  d1=sqrt((ax-bx)*(ax-bx)+(ay-by)*(ay-by));
  d2=sqrt((cx-bx)*(cx-bx)+(cy-by)*(cy-by));
  d3=sqrt((ax-cx)*(ax-cx)+(ay-cy)*(ay-cy));
  per=(d1+d2+d3)/2;
  per=sqrt(per*(per-d1)*(per-d2)*(per-d3));
  return per;
}
float vvod(float &ax,float &bx,float &cx,float &ay,float &by,float &cy,float &tx,float &ty)
{float p;
while(1)
	{
cout<<"Введите координату Х первой точки  "<<endl;
ax=prk();
cout<<"Введите координату Y первой точки  "<<endl;
ay=prk();
cout<<"Введите координату X второй точки  "<<endl;
bx=prk();
cout<<"Введите координату Y второй точки  "<<endl;
by=prk();
cout<<"Введите координату X третьей точки  "<<endl;
cx=prk();
cout<<"Введите координату Y третьей точки  "<<endl;
cy=prk();
p=ploshad(ax,bx,cx,ay,by,cy);
if(p==0) {
cout<<"Данные точки не образуют треугольник!"<<endl;
cout<<"Если хотите попробовать заного введите любое число."<<endl
    <<"Если хотите выйти нажмите ctrl+z enter"<<endl;
    prk();
system("cls");
}
else {
cout<<"Введите координату X точки М "<<endl;
tx=prk();
cout<<"Введите координату Y точки M "<<endl;
ty=prk();
return p;
	  }
	}
}
float prk()
{float v;
 while(1)
	{if (feof(stdin)) 
			exit(0);
			fflush(stdin);
		if (scanf("%g",&v)
			{cout<<"Вы ввели: "<<v<<endl;
			 return v;
			}
		else cout<<"Повторитие ввод!"<<endl;
	 }
}
Писал на первом курсе, вроде работало нормально
WOWka777 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка даты рождения относительно текущей. siteograf PHP 3 16.07.2010 03:45
Нахождение точки на медиане треугольника в координатной плоскости. Вадим Буренков Свободное общение 4 22.06.2010 19:18
кратчайшее расстояние от заданной точки до ближайщей стороны треугольника ddeman666 Помощь студентам 1 03.05.2010 14:47
Определить, лежат ли обе точки относительно прямой в одной полуплоскости - задача на С++. Wia Помощь студентам 4 21.12.2008 02:06
Отбражение чисел - точки, это точки, а не запятые, обозначающие дробную часть Дикий Помощь студентам 7 12.05.2008 17:57