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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.02.2012, 11:22   #1
777pro777
Пользователь
 
Регистрация: 25.10.2011
Сообщений: 29
По умолчанию [Pascal] Исправить код определения, лежит ли точка внутри данного прямоугольника

Код:
uses crt;
var x1,x2,y1,y2, n1, n2:real;
begin
writeln ('введите кординаты первой точки  ');
      readln (x1,y1);
writeln ('введите вторую точку ');
      readln (x2,y2);
writeln ('введите точку ');
      readln(n1,n2);
      if (n1>=X1) and (n1<=X2) and (n2<=Y1) and (N2>=Y2) then
writeln ('лежит точка') else writeln('нележит точка');
readln;
end.
Как исправить?когда координаты точки водишь x=0 y=0 то пишет не лежит хотя на самом деле лежит (((
задача
Дан прямоугольник, заданный двумя противоположными вершинами (X1, Yl); (Х2, Y2) и точка (X, Y).Определить, лежит ли эта точка внутри данного прямоугольника. как ее решить? я так понимаю мы две точки задаем а третью и четвертую программа сама вычесляе

Последний раз редактировалось ACE Valery; 27.02.2012 в 11:49.
777pro777 вне форума Ответить с цитированием
Старый 27.02.2012, 11:52   #2
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

какие-нибудь дополнительные свойства прямоугольника есть?
Потому что его стороны могут быть параллельны осям координат. могут не быть и тд и тп
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 27.02.2012, 12:09   #3
777pro777
Пользователь
 
Регистрация: 25.10.2011
Сообщений: 29
Сообщение

нет нечего не дано мне б хотя б для параллельных осей
777pro777 вне форума Ответить с цитированием
Старый 27.02.2012, 12:29   #4
KobolD
Форумчанин
 
Регистрация: 10.06.2010
Сообщений: 239
По умолчанию

Цитата:
Сообщение от 777pro777 Посмотреть сообщение
Код:
      if (n1>=X1) and (n1<=X2) and (n2<=Y1) and (N2>=Y2) then
А ты знаки сравнения с Y не перепутал случаем?
Чтобы слова не расходились с делом, нужно молчать и ничего не делать.
KobolD вне форума Ответить с цитированием
Старый 27.02.2012, 13:21   #5
denisbrain
Форумчанин
 
Регистрация: 29.05.2011
Сообщений: 449
Радость

Цитата:
Сообщение от KobolD Посмотреть сообщение
А ты знаки сравнения с Y не перепутал случаем?
если координаты прямоугольника заданы вершинами =>

по аналогии с задачей " лежит ли точка (X) внутри треугольника (ABC)"

Код:
Function Dlina(a,b:Tpoint):real;
var x1,y1,x2,y2:real;
begin
x1:=a.x;
y1:=a.y;
x2:=b.x;
y2:=b.y;
   result:=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1))
end;

Function GetP(a,b,c:Tpoint):real;
var p,r1,r2,r3:real;
begin
 r1:=Dlina(a,b);
 r2:=Dlina(b,c);
 r3:=Dlina(c,a);
 p:=(r1+r2+r3);
 result:=p;
end;

Function GetS(a,b,c:Tpoint):real;
var p,r1,r2,r3:real;
begin
 r1:=Dlina(a,b);
 r2:=Dlina(b,c);
 r3:=Dlina(c,a);
 p:=(r1+r2+r3)/2;
 result:=sqrt(p*(p-r1)*(p-r2)*(p-r3));
end;

Function GetTochka(a,b,c:Tpoint;X:Tpoint):boolean;
begin
   result:=abs(GetS(a,b,c)-(GetS(x,b,c)+GetS(a,x,c)+GetS(a,b,x)))<0.0001;
end;

т.е.
1. находишь S прямоугольника (ABCD)
2. представляем 4 треугольника с вершинами (ABX,BCX,CDX,ADX)
и если точка лежит в приделах прямоугольника то Сумма Площадей всех образованных треугольников будет равна площади прямоугольника (ABCD)

если координаты прямоугольника задаются X1,Y1, X2,Y2 диагональю и стороны параллельны осям координат то условие

Код:
x,y - точка 
x1:=min(x1,x2);
y1:=min(y1,y2);
x2:=max(x1,x2);
y2:=max(y1,y2);
if (x>=x1) and (y>=y1) and (x2>=x) and (y2>=y) then
задания на pascal/delphi ICQ 368254335
Tel +79177425326 mail denis-naymov1985(at)mail.ru login skype denis.new.skype

Последний раз редактировалось denisbrain; 27.02.2012 в 13:22. Причина: добавил ">="
denisbrain вне форума Ответить с цитированием
Старый 27.02.2012, 13:34   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от denisbrain
если координаты прямоугольника заданы вершинами =>

по аналогии с задачей " лежит ли точка (X) внутри треугольника (ABC)"
denisbrain, ОМГ!!!
Вы ещё лучевым методом проверьте, попадает точка в многоугольник или нет!

зачем так сложно то?!!

Цитата:
Сообщение от KobolD
А ты знаки сравнения с Y не перепутал случаем?
+1

исходный код (пост #1) написан верно.

Но надо учитывать, что координаты X1,Y1 и X2, Y2 должны соответствовать коодинатам левого верхнего и нижнего правого углов прямоугольника!

Значит, либо нужно задавать координаты исходных углов согласно требованию X1,Y1 - координаты левого верхнего, X2,Y2 - коорданиты правого нижнего угла.

либо написать условие проверки так:
Код:
      if (n1>=Min(X1,X2)) and (n1<=Max(X1,X2)) 
         and (n2>=Min(Y1,Y2)) and (n2<=Max(Y1,Y2)) then // точка лежит внутри прямоугольника
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определите, лежит ли данная точка на одной из сторон треугольника, заданного координатами его вершин. Марисабель Помощь студентам 0 02.12.2011 18:20
лежит ли точка внутри треугольника х-prof Помощь студентам 1 16.06.2011 20:16
Делфи. Лежит ли точка в заштрихованной части zoza1 Помощь студентам 5 12.02.2010 21:16
Определить лежит ли точка на пересечении 2 элипсов Sirega Общие вопросы C/C++ 8 03.03.2009 20:49
лежит ли заданная точка А внутри или вне много-угольника. Anton1997 Общие вопросы Delphi 4 30.11.2008 16:07