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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.03.2008, 16:28   #1
CoGnaC
 
Регистрация: 29.02.2008
Сообщений: 5
По умолчанию Пересечение прямой и круга

Подскажите пожалуйста, как отследить пересечение прямой и круга?
Есть линия, и точки центра круга(p1,p2), как это сделать?
procedure Tenemy1.draw(laser1,laser2:boolean; p1,p2:integer);
Код:
 var
  a:integer;
  k,b:real;
 begin
   a:=random(getmaxx);
   k:=(a-1)/(1-getmaxx);
   b:=(y-1)/(getmaxx-1);
   Circle(0,0,ER2);
   if laser1 then
    begin
     line(0,0,getmaxx,a);
     if (4*sqr(k)*sqr(b)-4*(sqr(k)+1)*(sqr(b)-sqr(hr))<0) then {Hr - радиус круга }
      circle(getmaxx div 2,getmaxx div 2,40);
    end;
   Circle(getmaxx,0,ER2);
   if laser2 then
    line(getmaxx,0,0,random(getmaxx));
 end;
CoGnaC вне форума Ответить с цитированием
Старый 05.03.2008, 16:37   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Пройдись по всем точкам линии и определи попадает ли она в окружность.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.03.2008, 16:51   #3
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Можно математически найти точки пересечения прямой и окружности:
(x-x0)^2+(y-y0)^2=R^2 - окружность,
y=kx+b - прямая.
Решаем систему, получаем квадратное уравнение (2 корня - 2 координаты). Линия между этими координатами и проходит внутри круга.
Если система не имеет решений - линия и круг не пересекаются. Если корень один - линия касается круга.

Последний раз редактировалось _Dmitry; 05.03.2008 в 16:55.
_Dmitry вне форума Ответить с цитированием
Старый 05.03.2008, 17:02   #4
CoGnaC
 
Регистрация: 29.02.2008
Сообщений: 5
По умолчанию

а как пройтись по линии? При каждом изменении переменных х и у нужно пересчитывать коэффицент к и b ? И сравнивать квадраты этих координат с квадратом радиуса?
CoGnaC вне форума Ответить с цитированием
Старый 05.03.2008, 17:06   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Один раз высчитай к и b а потом будеш получать Y
И сравнивай попадения точки в "радиус"
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.03.2008, 17:53   #6
CoGnaC
 
Регистрация: 29.02.2008
Сообщений: 5
По умолчанию

_Dmitry, пробывал, но как-то не получилось С этого впринципе и начинал.
Stilet, у меня проблемы возникают с построение уравнения для прямой . Если точка первая (0,0) а вторая (getmaxx,a), то получается что b=0...Находил b и к из системы уравнений, составленных для двух точек.
CoGnaC вне форума Ответить с цитированием
Старый 05.03.2008, 19:01   #7
CoGnaC
 
Регистрация: 29.02.2008
Сообщений: 5
По умолчанию

ай, сорри глупанул сильно))
то нормально что b=0, ща попробую сделать, потом отпишусь
CoGnaC вне форума Ответить с цитированием
Старый 06.03.2008, 12:50   #8
Plague
Забанен
Форумчанин Подтвердите свой е-майл
 
Аватар для Plague
 
Регистрация: 01.11.2006
Сообщений: 420
По умолчанию

_Dmitry прав
все сводится к решению квадратного уравнения вида:
a1*x^2 + b1*x + c1 = 0

где:
a1 = 1+k^2
b1 = -2*x0 + 2*k*b - 2*k*y0
c1 = b^2 + x0^2 - 2*b*y0 + y0^2 - R^2
Если ничто другое не помогает, прочтите, наконец, инструкцию! Аксиома Кана
Plague вне форума Ответить с цитированием
Старый 11.03.2008, 17:01   #9
CoGnaC
 
Регистрация: 29.02.2008
Сообщений: 5
По умолчанию

Спасибо всем, получилось как сказал Stilet(перебором всех точек). Если есть у кого свободное время, покажите пжл как математически можно это было сделать..
CoGnaC вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Анимация прямой NecroSlider Помощь студентам 3 23.04.2007 13:31
Объединение, пересечение, слияние массивов -=Domestos=- Помощь студентам 6 25.12.2006 21:06