Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как определить попала ли точка в треугольник 
V
    Опции темы
BOB4uK
  Дата 16.6.2008, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Есть треугольник координаты вершин которого известны! И есть точка с координатами Х и У!
Как определить попала ли точка в треугольник?
PM MAIL ICQ   Вверх
Jorjio
Дата 16.6.2008, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Геометрия 
Плоскость определена 3-мя прямыми. Идешь далле к принадлежности точки плоскости.
Думаю изобретать велосипед не стоит, открой справочник по математике.
PM MAIL ICQ Skype   Вверх
BOB4uK
Дата 16.6.2008, 18:47 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Пожалуйста пишите по существу, а не размазано, например пользуйся гуглем...
PM MAIL ICQ   Вверх
jonie
Дата 16.6.2008, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

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



Возможны два варианта взаимного  расположения точки и плоскости, ограниченной кривой: либо точка принадлежит плоскости, либо нет. Три точки задают плоскость тогда, и только тогда, когда они попарно различны, и не лежат на одной прямой
точка= (x,y,z)
обозначим плоскость как : $(xp_i, yp_i, zp_i), i=1..3$
уравнение плоскости : $ ax+by+cz = d $
где
\begin{eqnarray*}
a &=& (yp_2 -yp_1 )(zp_3 -zp_1 ) - (yp_3 -yp_1 )(zp_2 -zp_1 ); \\
b &=& -(xp_2 -xp_1 )(zp_3 -zp_1 ) + (xp_3 -xp_1 )(zp_2 -zp_1 ); \\
c &=& (xp_2 -xp_1 )(yp_3 -yp_1 ) - (xp_3 -xp_1 )(yp_2 -yp_1 ); \\
d &=& xp_1 a+yp_1 b+zp_1 c
\end{eqnarray*}
остается только проверить удовлетворяет ли (x,y,z) приведенному уравнению.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
BOB4uK
Дата 19.6.2008, 04:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Если чесно нифига не понятно! а треугольник плоский, координата Z не нужна!
PM MAIL ICQ   Вверх
ksili
Дата 19.6.2008, 06:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

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



BOB4uK, а мне непонятно при чём тут Builder. Если непонятен алгоритм решения задачи, задавай вопрос в форуме по алгоритмам.

Цитата(BOB4uK @  19.6.2008,  08:19 Найти цитируемый пост)
а треугольник плоский, координата Z не нужна!

Ну так подставь z=0 

Цитата(jonie @  16.6.2008,  23:34 Найти цитируемый пост)
остается только проверить удовлетворяет ли (x,y,z) приведенному уравнению.

Там не уравнение должно быть, а система неравенств


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Mayk
Дата 19.6.2008, 06:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


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

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



Цитата(BOB4uK @  19.6.2008,  08:19 Найти цитируемый пост)
Если чесно нифига не понятно! а треугольник плоский, координата Z не нужна! 

Доступное описание алгоритма есть в Кормене  et al.

Цитата(ksili @  19.6.2008,  10:13 Найти цитируемый пост)
BOB4uK, а мне непонятно при чём тут Builder. 

Кстати неалгоритмиеческое решение на WinAPI может подразумевать использование 
ф-ций CreatePolygonRgn  + PtInRegion.


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
BOB4uK
Дата 19.6.2008, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Mayk @ 19.6.2008,  06:32)
Доступное описание алгоритма есть в Кормене  et al.

Это где?
PM MAIL ICQ   Вверх
Walker
Дата 20.6.2008, 08:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



 
Цитата

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

А по существу - в "Центр помощи" с такими вопросами и наездами. user posted image
В Google, кстати, ответ на этот вопрос обнаруживается в течение пяти секунд.

Хинт - точка находится в треугольнике, если площадь исходного треугольника равна сумме площадей треугольников, образованных каждой из сторон треугольника и "проблемной" точкой. Всё!
ABC - треугольник, D - точка
SABC = SABD + SACD + SBCD.
Задача решается комбинацией трёх функций.
1. Сравнение площадей.
2. Нахождение площади по трём сторонам по формуле Герона.
3. Нахождение длины отрезка по двум точкам.
Функции приведены в последовательности, выводимой из логического рассуждения.

Удачи!
ИМХО, тему можно закрывать!



--------------------
"От вчерашних побед остаётся усталость, если завтрашний день не сулит ничего..."
PM MAIL   Вверх
Dmi3ev
Дата 20.6.2008, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

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



Walker правильно говорит, что-то типа этого
Код

//---------------------------------------------------------------------------

#include <vcl.h>
#include <mypoint.h>
#include <mysegment.h>
#pragma hdrstop

#include "tr_U.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
long double SGeron (MySeg a, MySeg b, MySeg c)
{
 long double p=(a.Length()+b.Length()+c.Length())/2;
 return sqrt(p*(p-a.Length())*(p-b.Length())*(p-c.Length()));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
MyPoint A(1,2), B(2,8), C(1,6);
MyPoint P(1,1);
MySeg AB(A,B), BC(B,C), AC(A,C);
MySeg AP(A,P), BP(B,P), CP(C,P);
long double s, s1, s2, s3;
s=SGeron(AB, BC, AC);
s1=SGeron (AB, AP, BP);
s2=SGeron (BC, BP, CP);
s3=SGeron (AC, AP, CP);
if ((s1+s2+s3)>s)
 MessageBox(NULL, "Точка вне треугольника!", "Сообщение", MB_OK);
else
 MessageBox(NULL, "Точка внутри треугольника!", "Сообщение", MB_OK);
Edit1->Text=FloatToStr(s);
Edit2->Text=FloatToStr(s1);
Edit3->Text=FloatToStr(s2);
Edit4->Text=FloatToStr(s3);
}
//---------------------------------------------------------------------------

создал класс точки MyPoint
вот текст mypoint.h 
Код

#ifndef MYPOINT_H
#define MYPOINT_H
class MyPoint
{
public:
MyPoint(double a=0.0, double b=0.0){x=a; y=b;};
void Set(double a, double b){x=a; y=b;};
double Getx(){return x;};
double Gety(){return y;};
~MyPoint(){};
private:
double x, y;
};
#endif

создал класс отрезка
вот текст mysegment.h
Код

#include <mypoint.h>
#include <math.h>
#define XX(x) ((x)*(x))
class MySeg
{
public:
 MySeg (MyPoint A, MyPoint B)
  {
   p1=A; p2=B;
  };
 void Set (MyPoint A, MyPoint B)
  {
   p1=A; p2=B;
  };
 long double Length ()
  {
   return sqrt(XX(p1.Gety()-p2.Gety())+XX(p1.Getx()-p2.Getx()));
  };
 ~MySeg (){};
private:
 MyPoint p1, p2;
};

я все делал быстро, но должно работать


--------------------

PM MAIL   Вверх
Mayk
Дата 20.6.2008, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


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

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



Цитата(BOB4uK @  19.6.2008,  19:24 Найти цитируемый пост)

Это где? 

тут


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
BOB4uK
Дата 20.6.2008, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Спасибо!
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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