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

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

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.07.2010, 11:05   #1
zumm
БохЪ
Форумчанин
 
Аватар для zumm
 
Регистрация: 30.09.2009
Сообщений: 724
Смех И снова геометрия

Доброго всем! Я конечно понимаю что всех уже задрал со своей геометрией, но мне все таки нужно получить ответ еще на один вопрос есть координаты определенной точки, и нужно узнать входит ли она в определенную четырех угольную область (квадрат) координаты углов этой области известны.
В планах порабощение вселенной...

Последний раз редактировалось zumm; 10.07.2010 в 11:18.
zumm вне форума Ответить с цитированием
Старый 10.07.2010, 12:12   #2
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

И что тут сложного? Проверяете координаты точки, если они меньше по x нижних углов и больше по x верхних углов, тогда проверяете y координаты, если больше левой границы и меньше правой - тогда точка в области. Если хоть одно условие не совпадает - точка вне области.
MaTBeu вне форума Ответить с цитированием
Старый 10.07.2010, 12:21   #3
zumm
БохЪ
Форумчанин
 
Аватар для zumm
 
Регистрация: 30.09.2009
Сообщений: 724
По умолчанию

Дело в том что область может быть и под углом, тоесть к примеру x вернего угла 15, а х нижнего 10. Область является квадратной, но может быть повернута под любым углом.
В планах порабощение вселенной...
zumm вне форума Ответить с цитированием
Старый 10.07.2010, 12:24   #4
Levsha100
Заблокирован
Старожил
 
Регистрация: 20.07.2008
Сообщений: 4,032
По умолчанию

Тогда нужно записать четыре уравнения прямой (y=ax+b) и сравнивать положение точки с каждой из них.
Levsha100 вне форума Ответить с цитированием
Старый 10.07.2010, 12:33   #5
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,091
По умолчанию

Если можно использовать WINAPI, то самый простой вариант: использовать функцию PtInRgn. Создаёте квадратный регион по точкам своим и проверяете вхождение точки в этот регион. 5 строк кода всего-лишь. Когда писал 2Д редактор с вращением и прочими возможностями, то скорость проверки посредством этой функции была достаточно неплохая. Даже курсор менял в зависимости от нахождения мышки над объектом и тормозов не было. Ну и из бонусов: возможна проверка вхождения в любую фигуру, не только квадрат.
Так же можно повернуть этот квадрат на угол -A (где A - текущий угол поворота), получим координаты вершин в "нормальном" положении. Точно так же, вокруг той же точки на тот же угол -А поворачиваем и точку. Дальше идёт банальное сравнение, как при неповернутом квадрате. Наверно, не самый оптимальный вариант, но работать будет и просто реализовать, раз уж поворот фигур уже есть.

Последний раз редактировалось pu4koff; 10.07.2010 в 12:40.
pu4koff вне форума Ответить с цитированием
Старый 10.07.2010, 13:55   #6
Rapid
Форумчанин
 
Аватар для Rapid
 
Регистрация: 01.09.2007
Сообщений: 747
По умолчанию

Подскажу идею.
По координатам определяешь уравнение фигуры. По уравнению проводишь анализ, проходит через точку или нет.

Здесь более развернутый ответ на вопрос. (нажми "сохранить как", там djvu файл)
И кто теперь будет говорить, что вузовская математика (хотя бы в лице аналитической геометрии) программисту не нужна?
Никому не верьте.
Rapid вне форума Ответить с цитированием
Старый 10.07.2010, 18:21   #7
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Цитата:
И снова геометрия
Мда, лучше бы голову включили и учебник почитали. Все таки это не высшая математика. Это еще хорошо что вам требуется определить точку в квадрате, а не высчитывать скаляры, нормали итд...
Цитата:
вузовская математика
По мне так уровень 7-8 (начало изучения геометрии) класса среднеобразовательной школы.

Последний раз редактировалось Вадим Буренков; 10.07.2010 в 18:24.
Вадим Буренков вне форума Ответить с цитированием
Старый 10.07.2010, 19:54   #8
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Поищите "вхождение точки в полигон" или как-то так...
Цитата:
Если можно использовать WINAPI, то самый простой вариант: использовать функцию PtInRgn.
Согласен... Но где-то тут по соседству делали тесты и выяснили что так намного медленнее получается чем "вручную"...
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 10.07.2010, 22:12   #9
zumm
БохЪ
Форумчанин
 
Аватар для zumm
 
Регистрация: 30.09.2009
Сообщений: 724
По умолчанию

МдЭ ребятА, не помогли вы мне на этот раз, пришлось и правда читать матчасть и использовать матрицы...

Код:
function TestPoint(ax,ay,bx,by,px,py: single): boolean;
begin
  if ((bx-ax)*(py-ay)-(by-ay)*(px-ax))<=0 then
    result:=true
  else
    result:=false;
end;

function TestBullet(bx,by,objx,objy,w,h,a: single): boolean;
var
  vec: array[0..4] of record
    x,y: single;
  end;
  matrix: array[0..3] of single;
  sina,cosa,dx,dy: single;
  i,k: byte;
begin
  sina:=sin(a);
  cosa:=cos(a);
  matrix[0]:=cosa*w;
  matrix[1]:=-sina*h;
  matrix[2]:=sina*w;
  matrix[3]:=cosa*h;
  vec[0].x:=matrix[0]+matrix[1];
  vec[0].y:=matrix[2]+matrix[3];
  vec[4]:=vec[0];
  vec[1].x:=matrix[0]-matrix[1];
  vec[1].y:=matrix[2]-matrix[3];
  vec[2].x:=-matrix[0]-matrix[1];
  vec[2].y:=-matrix[2]-matrix[3];
  vec[3].x:=-matrix[0]+matrix[1];
  vec[3].y:=-matrix[2]+matrix[3];
  k:=0;
  dx:=bx-objx;
  dy:=by-objy;
    for i:=0 to 3 do
      if TestPoint(vec[i].x,vec[i].y,vec[i+1].x,vec[i+1].y,dx,dy) then
        inc(k);
    if k<4 then
      result:=false
    else
      result:=true;
end;
Вот где то так...
В планах порабощение вселенной...

Последний раз редактировалось zumm; 10.07.2010 в 22:17.
zumm вне форума Ответить с цитированием
Старый 10.07.2010, 22:25   #10
Levsha100
Заблокирован
Старожил
 
Регистрация: 20.07.2008
Сообщений: 4,032
По умолчанию

Матрицы ? Где?
Levsha100 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Геометрия zumm Свободное общение 3 07.07.2010 18:37
Си геометрия Денни Помощь студентам 11 05.03.2010 09:41
MDIChild снова и снова... Siber_Dec Общие вопросы Delphi 2 13.12.2009 03:24
Геометрия Levsha100 Помощь студентам 5 29.09.2009 09:56