2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу Пред.  1, 2, 3, 4
 
 Re: Пересечение отрезка с окружностью
Сообщение02.01.2018, 14:48 
Аватара пользователя

(Оффтоп)

Вот так просыпаешься в новом году — и ты уже знаменитость. :P

 
 
 
 Re: Пересечение отрезка с окружностью
Сообщение02.01.2018, 14:58 
Аватара пользователя
Rak so dna в сообщении #1280655 писал(а):
даже после исправления всех синтаксических ошибок

"Даже" синтаксические ошибки выявляются компилятором. Программа работает. Или Вы думаете, что я до сих пор "не вздумал вставить её себе в код"?
Дальше: защиту от дурака ставят на передающихся пользователям программах. Это другой случай, просто проверка теоретического способа. Успешная.

-- 02.01.2018, 19:02 --

svv в сообщении #1280680 писал(а):
Вот так просыпаешься в новом году — и ты уже знаменитость. :P
Не выдумывайте простых и действенных методик, никто про Вас не вспомнит.

 
 
 
 Re: Пересечение отрезка с окружностью
Сообщение02.01.2018, 16:26 
Аватара пользователя
atlakatl слушайте, писал я не вам а ТС. Пожалуйста, придерживайтесь своего
atlakatl в сообщении #1280614 писал(а):
Вы неудачливый демагог. Бодаться с Вами мне лень. Будет что сказать умное, заходите. Пока Ваша писанина мне по-барабану.
Вы мне крайне неприятны, но если ТС захочет, я укажу конкретное место синтаксических (именно в классическом Паскале) и логических ошибок.
P.S. Заранее прошу прощения, но не удержался:

(Оффтоп)

atlakatl в сообщении #1280683 писал(а):
Дальше: защиту от дурака ставят на передающихся пользователям программах. Это другой случай, просто проверка теоретического способа. Успешная.
"защита от дурака" :facepalm: ну да, подумаешь прога вылетает при куче стандартных входных данных - действительно, кому нужна эта проверка всяких там граничных условий, ОДЗ, особых точек - это всё для дураков. И нет, это не "проверка теоретического способа" (как обычно, непонимание того, что конкретными примерами теоретический способ подтвердить нельзя) - это чужая удачная идея, завернутая в ваш "код" (код в кавычках - только из уважения к форумчанам, очень хотелось написать другое слово).

 
 
 
 Re: Пересечение отрезка с окружностью
Сообщение02.01.2018, 17:03 
 !  atlakatl, Rak so dna, прекращайте безобразие.

P.S. Стоит отметить, что для стороннего наблюдателя причины столь бурного выяснения отношений уже во второй теме совершенно незаметны. Учтите, пожалуйста, что для окружающих вы выглядите как два человека, поругавшихся совершенно без какого-либо повода.

 
 
 
 Re: Пересечение отрезка с окружностью
Сообщение03.01.2018, 13:34 
Аватара пользователя
Igor2323 в сообщении #1280155 писал(а):
Подскажите пожалуйста как узнать пересекает ли отрезок круг и в каких точках.
Вы случайно не олимпиадным программированием решили заняться? 8-)

 
 
 
 Re: Пересечение отрезка с окружностью
Сообщение05.01.2018, 22:10 
atlakatl в сообщении #1280622 писал(а):
Ну и в паскалевский тег обрамил:
Было бы хорошо разделить код на процедуры и убрать ненужный ввод-вывод (после чего можно и глобальные переменные выкинуть и заголовок программы), а ещё с форматированием поработать (пробелами и аккуратным регистром код не испортишь), но второй раз предлагать не буду. :mrgreen:

 
 
 
 Re: Пересечение отрезка с окружностью
Сообщение05.01.2018, 22:47 
Аватара пользователя
arseniiv
Программка получилась простая, потому с оформлением не заморачивался. А в более сложных случаях попробую оформить "как надо".

 
 
 
 Re: Пересечение отрезка с окружностью
Сообщение06.01.2018, 17:08 
Аватара пользователя
код: [ скачать ] [ спрятать ]
Используется синтаксис Pascal
program cut_circle; //Пересекает ли отрезок окружность?
function common(x0, y0, x1, y1, x2, y2, r :real) :boolean; //Координаты окружности, отрезка, радиус
begin
  Result:=TRUE;
  x1:=x1-x0; x2:=x2-x0; y1:=y1-y0; y2:=y2-y0; //Перенос окружности в (0; 0)
  var l1:=sqrt(x1*x1+y1*y1); var l2:=sqrt(x2*x2+y2*y2); //Расстояние от (0; 0) до концов отрезка
  if ((l1<=r) AND (l2>=r)) OR ((l1>=r) AND (l2<=r)) then common:=TRUE //Один из концов отрезка внутри окружности, второй снаружи
  else if (l1<r) AND (l2<r) then common:=FALSE //Оба конца внутри окружности
    else //Оба конца снаружи
      begin
        var p1:=x1*(x2-x1)+y1*(y2-y1); var p2:=x2*(x2-x1)+y2*(y2-y1); //Знаки произведения векторов
        var distance:=abs((x2*y1-x1*y2)/sqrt((power((y2-y1),2)+power((x2-x1),2)))); //Расстояние до прямой
        if ((p1>=0) AND (p2<=0) OR (p1<=0) AND (p2>=0)) AND (distance<=r) then common:=TRUE
        else common:=FALSE;
      end;
end;
begin
  if common(0, 0, 1, 1, 1, 1, 2) then writeln('Пересекает') else writeln('Пересечений нет');
end.
 

 
 
 
 Re: Пересечение отрезка с окружностью
Сообщение06.01.2018, 19:12 
Лучше обойтись без корней, без делений и без вложенных структурных операторов. Как-то так:

код: [ скачать ] [ спрятать ]
Используется синтаксис Pascal
function common(x0,y0,r, x1,y1, x2,y2: real): boolean; {Центр окружности, радиус, отрезок}
var  rr, vv: real;      { квадрат радиуса и длины отрезка}
     rr1, rr2: real;     { квадраты расстояний до центра   }
     sp1,sp2: real;    { ск. произведения радиус-векторов на отрезок }
begin
  x1:=x1-x0;   y1:=y1-y0;    x2:=x2-x0;   y2:=y2-y0;
  rr:=sqr(r);    rr1:=sqr(x1)+sqr(y1);   rr2:=sqr(x2)+sqr(y2);
  if (rr1-rr)*(rr2-rr)<=0   { - одна внутри, другая снаружи }
    then  begin    common:=true;    exit;    end;
  if (rr1<rr) and (rr2<rr)   { - обе внутри }
    then begin    common:=false;    exit;    end;
  sp1:=x1*(x1-x2) + y1*(y1-y2);
  sp2:=x2*(x2-x1) + y2*(y2-y1);
  vv:=sqr(x1-x2)+sqr(y1-y2);
  if vv*rr1 - sqr(sp1)>vv*rr   { - прямая слишком далеко }
    then begin    common:=false;    exit;    end;
  common:=(sp1>0) and (sp2>0);   { - концы по разные стороны окр. ? }
end;

begin
  writeln(common(0,0,10, -3,10, 4,10));
  readln;
end.
 

 
 
 
 Re: Пересечение отрезка с окружностью
Сообщение06.01.2018, 19:49 
Аватара пользователя
ewert
Узнал много нового. exit из подпрограммы это мощно. Спасибо.

 
 
 
 Re: Пересечение отрезка с окружностью
Сообщение08.01.2018, 01:56 
 i  Накопившийся оффтопик отделен в «О написании кода "для себя"»

 
 
 [ Сообщений: 56 ]  На страницу Пред.  1, 2, 3, 4


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group