Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Определить принадлежит ли точка треугольнику 
:(
    Опции темы
Vasya2904
Дата 12.12.2013, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 20.8.2011

Репутация: нет
Всего: нет



Доброе время суток! Нужно определить принадлежит ли точка треугольнику. Треугольник задан((3;1)(3;5)(6;2)), точка вводится(x0, y,). Использую решение через векторное произведнеие(http://www.cyberforum.ru/mathematics/thread8234.html), но считается не правильно. Вот код:
Код
#include<iostream>
#include<windows.h>
using namespace std;
int main()
{
setlocale (0, "");
int x0, x1, x2, x3, y0, y1, y2, y3, x, y, z;
double ur1, ur2, ur3;
cout << "Введите координаты: ";
cin >> x0 >> y0;
ur1 =((3 - x0) * (5 - 1)) - ((3 - 3) * (1 - y0));
ur2 = ((3 - x0) * (2 - 5)) - ((6 - 3) * (5 - y0));
ur3 = ((6 - x0) * (1 - 2)) - ((3 - 6) * (2 - y0));
bool a = (ur1 > 0);
bool b = (ur2 > 0);
bool c = (ur3 > 0);
if ((a && b && c) || (!a && !b && !c))
cout << "Точка внутри треугольника";
else if ((ur1 == 0) || (ur2 == 0) || (ur3 == 0))
cout << "Точка на стороне ";
else cout << "Точка снаружи ";
cin.get();
cin.get();
}

Что не так? Спасибо. 

Модератор: не забываем пользоваться кнопочкой "Код"
PM MAIL ICQ Skype   Вверх
smalcom
  Дата 12.12.2013, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 494
Регистрация: 16.10.2004
Где: Dnepr

Репутация: нет
Всего: 7



Цитата

Что не так?

1. выглядит как мусорник
2. "что не так" и "не работает" из лексикона бухгалтеров.

вам скорее всего сюда http://forum.vingrad.ru/forum/Vingrad-help-center.html


--------------------
What DA F...???
PM MAIL WWW Skype Jabber   Вверх
rudolfninja
Дата 13.12.2013, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 341
Регистрация: 19.2.2013
Где: г. Минск

Репутация: 1
Всего: 6



Вот рабочий код:
Код

class point
{
    int m_x;
    int m_y;
public:
    point() {m_x = 0, m_y = 0;}
    point(int x, int y) {m_x = x, m_y = y;}
    ~point() {m_x = 0, m_y = 0;}

    int x() {return m_x;}
    int y() {return m_y;}
};

bool isInTriangle(point pt1, point pt2, point pt3, point test);

int main()
{
point pt1(3, 1), pt2(3, 5), pt3(6, 2);
int x0, y0;
std::cout << "Input test point coordinates: ";
std::cin >> x0 >> y0;
point test(x0, y0);

if(isInTriangle(pt1, pt2, pt3, test))
    std::cout << "Inside\n";
else
    std::cout << "Outside\n";

return 0;
}

bool isInTriangle(point pt1, point pt2, point pt3, point test)
{
    int a = (pt1.x() - test.x()) * (pt2.y() - pt1.y()) - (pt2.x() - pt1.x()) * (pt1.y() - test.y());
    int b = (pt2.x() - test.x()) * (pt3.y() - pt2.y()) - (pt3.x() - pt2.x()) * (pt2.y() - test.y());
    int c = (pt3.x() - test.x()) * (pt1.y() - pt3.y()) - (pt1.x() - pt3.x()) * (pt3.y() - test.y());
 
    if ((a >= 0 && b >= 0 && c >= 0) || (a <= 0 && b <= 0 && c <= 0))
        return true;
    else
        return false;
}

Если точка принадлежит треугольнику, то функция isInTriangle возвращает true, иначе false. Под "принадлежит" понимается, что она либо лежит внутри треугольника, либо на одной из его сторон. 
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0972 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.