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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.10.2014, 10:27   #1
Ilai
Пользователь
 
Регистрация: 10.09.2014
Сообщений: 90
Восклицание Геометрическая задача - проверить, попадает ли начало координат (0,0) в заданный координатами вершин треугольник (FreePascal)

Добрый день! Пожалуйста, помогите с задачей в Free Pascal. Не знаю даже с чего начать: Известны координаты вершин треугольника. Определить, где находится начало координат (внутри треугольника, снаружи или находится на одной из его сторон).
Ilai вне форума Ответить с цитированием
Старый 13.10.2014, 10:47   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А как бы ты решал эту математическую задачу на бумаге?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.10.2014, 11:16   #3
Ilai
Пользователь
 
Регистрация: 10.09.2014
Сообщений: 90
По умолчанию

В том то и проблема, что даже не знаем как решить её на бумаге. С геометрией довольно таки туго((
Ilai вне форума Ответить с цитированием
Старый 13.10.2014, 11:42   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

У-у-у... Аналогично )
Не специализируюсь в математике.
Однако могу порекомендовать начать отсюда: https://ru.wikipedia.org/wiki/%D0%9F...87.D0.BA.D0.B8
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.10.2014, 12:34   #5
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Код:
type
  TFloatPoint = record
    X, Y: Double;
  end;
  
  TTriangle = record
    A, B, C: TFloatPoint;
  end;
  
function PointInTriangle(const T: TTriangle; const P: TFloatPoint): TValueRelationship;
begin
  // ГУГЛИТЬ ВСЕ ИНТЕРНЕТЫ!!! < это ссылка, если чо
end;
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 13.10.2014, 12:37   #6
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

Код:
#include <stdio.h>
 
bool f(float x1,float y1,float x2,float y2,float x3,float y3,float x4,float y4)
{
float a1,b1,c1, a2,b2,c2, a3,b3,c3;
float r1,r2,r3;
// 1.x1,y1, x2,y2
a1 = y2 - y1;
b1 = x1 - x2;
c1 = x2*y1 - x1*y2;
 
r1 = a1*x3 + b1*y3 + c1;
r2 = a1*x4 + b1*y4 + c1;
r3 = r1*r2;
 
if (r3 < 0)
return false;
 
// 2.x2,y2, x3,y3
a2 = y3 - y2;
b2 = x2 - x3;
c2 = x3*y2 - x2*y3;
 
r1 = a2*x1 + b2*y1 + c2;
r2 = a2*x4 + b2*y4 + c2;
r3 = r1*r2;
 
if (r3 < 0)
return false;
 
 
// 3.x1,y1, x3,y3
 
a3 = y3 - y1;
b3 = x1 - x3;
c3 = x3*y1 - x1*y3;
 
r1 = a3*x2 + b3*y2 + c3;
r2 = a3*x4 + b3*y4 + c3;
r3 = r1*r2;
 
if (r3 < 0)
return false;
else
return true;
 
}
 
int main()
{
int r;
float x1,y1,x2,y2,x3,y3; // точки треугольника
float x4,y4; // проверяемая точка
 
x1 = 2.0;
y1 = 1.0;
 
x2 = 3.0;
y2 = 0.0;
 
x3 = -1.0;
y3 = 0.0;
 
x4 = 0.9;
y4 = 0.5;
 
r = f(x1,y1,x2,y2,x3,y3,x4,y4);
 
printf("%d\n", r);
 
return 0;
}
Как-то так, только нужно портировать на паскаль
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 13.10.2014, 12:47   #7
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

Код:

var
 r: integer;
 x1,y1,x2,y2,x3,y3:real; // точки треугольника
 x4,y4:real; // проверяемая точка
 
function f( x1: real, y1:real, x2:real, y2:real, x3:real, y3:real, x4:real, y4:real):integer;
var
 a1,b1,c1, a2,b2,c2, a3,b3,c3: real;
 r1,r2,r3:real;
begin
// 1.x1,y1, x2,y2
a1 := y2 - y1;
b1 := x1 - x2;
c1 := x2*y1 - x1*y2;
 
r1 := a1*x3 + b1*y3 + c1;
r2 := a1*x4 + b1*y4 + c1;
r3 := r1*r2;
 
if (r3 < 0) then
f := 0;
 
// 2.x2,y2, x3,y3
a2 := y3 - y2;
b2 := x2 - x3;
c2 := x3*y2 - x2*y3;
 
r1 := a2*x1 + b2*y1 + c2;
r2 := a2*x4 + b2*y4 + c2;
r3 := r1*r2;
 
if (r3 < 0) then
f := 0;
 
 
// 3.x1,y1, x3,y3
 
a3 := y3 - y1;
b3 := x1 - x3;
c3 := x3*y1 - x1*y3;
 
r1 := a3*x2 + b3*y2 + c3;
r2 := a3*x4 + b3*y4 + c3;
r3 := r1*r2;
 
if (r3 < 0) then
f := 0
else
f := 1;
 
end;
 
begin

 
x1 := 2.0;
y1 := 1.0;
 
x2 := 3.0;
y2 := 0.0;
 
x3 := -1.0;
y3 := 0.0;
 
x4 := 0.0;
y4 := 0.0;
 
r := f(x1,y1,x2,y2,x3,y3,x4,y4);
 
writeln( r);
 
end.
На паскале
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 14.10.2014, 10:33   #8
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Ох уж эти десять символов
Изображения
Тип файла: jpg Безымянный.jpg (114.4 Кб, 76 просмотров)
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 15.10.2014, 17:51   #9
Ilai
Пользователь
 
Регистрация: 10.09.2014
Сообщений: 90
По умолчанию

Большое всем спасибо!!!!
Ilai вне форума Ответить с цитированием
Старый 15.10.2014, 18:01   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Rin, кстати, учитывать отдельно случай, когда точка лежит на одной из сторон треугольника учитывать не нужно. По формуле Герона площадь такого треугольника штатным образом получается равной нулю (точно), т.к. полупериметер получается равным длине той стороны, на которой лежит точка. поэтому p-Длинастороны даст ноль, произведение тоже в ноль обратится, а корень из нуля равен нулю
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
решение задачи в Pascal - Проверить принадлежность точки с заданными координатами кругу с заданным радиусом и координатами центра Екатерина23 Помощь студентам 1 05.12.2013 16:35
Треугольник на плоскости задан координатами своих вершин.Найти координаты точки пересечения его медиан. Silver23 Помощь студентам 2 13.01.2010 15:59
Создать класс – треугольник, заданный своими координатами (точками). jenja Общие вопросы Delphi 5 18.04.2008 07:50