Пересечение отрезка с окружностью
От: Esef Украина  
Дата: 05.07.05 14:55
Оценка:
Возникла сабжевая задача.... Как заправский лентяй прежде чем что-то реализовывать поискал в тырнете... Нашел вот такой вот кусок кода:
bool IntersectCircleLine(const Vec2&center,float radius,const Vec2&p1,const Vec2&p2)
{
  float x01=p1.x-center.x;
  float y01=p1.y-center.y;
  float x02=p2.x-center.x;
  float y02=p2.y-center.y;

  float dx=x02-x01;
  float dy=y02-y01;

  float a=dx*dx+dy*dy;
  float b=2.0f*(x01*dx+y01*dy);
  float c=x01*x01+y01*y01-radius*radius;

  if(-b<0)return (c<0);
  if(-b<(2.0f*a))return (4.0f*a*c-b*b<0);
  return (a+b+c<0);
}

Вбил, попробовал — таки работает... Но вот только как — не пойму
Мож кто разъяснит убогому?
P.S. Как бы я сам это делал — нашел бы точку пересечения перпендикуляра опущеного с центра круга с отрезком прямой. Если она лежит в середине круга то прямая пересекает круг... Иначе нет... В принципе аналитически я все это даже вывел, но получается несколько более громоздко чем вышепреведенное решение.
Re: Пересечение отрезка с окружностью
От: korzhik Россия  
Дата: 05.07.05 15:03
Оценка:
Здравствуйте, Esef, Вы писали:

E>Возникла сабжевая задача.... Как заправский лентяй прежде чем что-то реализовывать поискал в тырнете... Нашел вот такой вот кусок кода:


[]

E>Вбил, попробовал — таки работает... Но вот только как — не пойму

E>Мож кто разъяснит убогому?

Вот здесь решение с объяснением
Re: Пересечение отрезка с окружностью
От: Trean Беларусь http://axamit.com/
Дата: 05.07.05 19:50
Оценка: 4 (1) -1
Здравствуйте, Esef, Вы писали:

E>Возникла сабжевая задача.... Как заправский лентяй прежде чем что-то реализовывать поискал в тырнете... Нашел вот такой вот кусок кода:

skipped
E>Вбил, попробовал — таки работает... Но вот только как — не пойму
E>Мож кто разъяснит убогому?
E>P.S. Как бы я сам это делал — нашел бы точку пересечения перпендикуляра опущеного с центра круга с отрезком прямой. Если она лежит в середине круга то прямая пересекает круг... Иначе нет... В принципе аналитически я все это даже вывел, но получается несколько более громоздко чем вышепреведенное решение.

По-моему можно найти расстояние от центра окружности до прямой (или отрезка — чуть переписать придется) и проверить больше ли радиус этого расстояния или меньше.
Re: Пересечение отрезка с окружностью
От: minorlogic Украина  
Дата: 06.07.05 06:56
Оценка:
Здравствуйте, Esef, Вы писали:


Действительно вначале мы находим вектор проходящий от центра шарика к линии.
тут теория как это сделать без корней и т.д.
http://www.euclideanspace.com/maths/geometry/elements/line/projections/index.htm

потом банально сравниваем длину этого вектора с радиусом , а точнее квадрат длины с квадратом радиуса.
Ищу работу, 3D, SLAM, computer graphics/vision.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.