2014 dxdy logo

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

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


Правила форума


Посмотреть правила форума



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


23/07/08
10668
Crna Gora

(Оффтоп)

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

 Профиль  
                  
 
 Re: Пересечение отрезка с окружностью
Сообщение02.01.2018, 14:58 
Аватара пользователя


21/09/12

1871
Rak so dna в сообщении #1280655 писал(а):
даже после исправления всех синтаксических ошибок

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

-- 02.01.2018, 19:02 --

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

 Профиль  
                  
 
 Re: Пересечение отрезка с окружностью
Сообщение02.01.2018, 16:26 
Аватара пользователя


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

(Оффтоп)

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

 Профиль  
                  
 
 Re: Пересечение отрезка с окружностью
Сообщение02.01.2018, 17:03 
Заслуженный участник


09/05/12
25179
 !  atlakatl, Rak so dna, прекращайте безобразие.

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

 Профиль  
                  
 
 Re: Пересечение отрезка с окружностью
Сообщение03.01.2018, 13:34 
Аватара пользователя


26/05/12
1534
приходит весна?
Igor2323 в сообщении #1280155 писал(а):
Подскажите пожалуйста как узнать пересекает ли отрезок круг и в каких точках.
Вы случайно не олимпиадным программированием решили заняться? 8-)

 Профиль  
                  
 
 Re: Пересечение отрезка с окружностью
Сообщение05.01.2018, 22:10 
Заслуженный участник


27/04/09
28128
atlakatl в сообщении #1280622 писал(а):
Ну и в паскалевский тег обрамил:
Было бы хорошо разделить код на процедуры и убрать ненужный ввод-вывод (после чего можно и глобальные переменные выкинуть и заголовок программы), а ещё с форматированием поработать (пробелами и аккуратным регистром код не испортишь), но второй раз предлагать не буду. :mrgreen:

 Профиль  
                  
 
 Re: Пересечение отрезка с окружностью
Сообщение05.01.2018, 22:47 
Аватара пользователя


21/09/12

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

 Профиль  
                  
 
 Re: Пересечение отрезка с окружностью
Сообщение06.01.2018, 17:08 
Аватара пользователя


21/09/12

1871
код: [ скачать ] [ спрятать ]
Используется синтаксис 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 
Заслуженный участник


11/05/08
32166
Лучше обойтись без корней, без делений и без вложенных структурных операторов. Как-то так:

код: [ скачать ] [ спрятать ]
Используется синтаксис 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 
Аватара пользователя


21/09/12

1871
ewert
Узнал много нового. exit из подпрограммы это мощно. Спасибо.

 Профиль  
                  
 
 Re: Пересечение отрезка с окружностью
Сообщение08.01.2018, 01:56 
Заслуженный участник


09/05/12
25179
 i  Накопившийся оффтопик отделен в «О написании кода "для себя"»

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 56 ]  На страницу Пред.  1, 2, 3, 4

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: YandexBot [bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group