Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как определить все ли отрезки лежат в окружности. 
:(
    Опции темы
Fringe
  Дата 22.4.2010, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 6.4.2010

Репутация: нет
Всего: нет



Ув. форумчане, выручите пожалуйста. Не могу понять как можно реализовать данное условие:

Если не все отрезки лежат в окружности, то найти количество отрезков, лежащих в первой четверти. В противном случае найти отрезок наименьшей длины.


Это сообщение отредактировал(а) Fringe - 22.4.2010, 21:41
PM MAIL   Вверх
Gluttton
Дата 22.4.2010, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: нет
Всего: 54



Внутри окружности находятся те отрезки, начало и конец которых находятся внутри окружности. Т.о. задача сводиться к решению задачи определения вхождения точки в окружность.

В окружность входит та точка, которая удалена от цента окружности на величину не более (если учитывать точки на окружности) или менее (для точек расположенных строго внутри окружности) величина радиуса окружности.

Для определения удаления точки от центра окружности необходимо решить равносторонний треугольник с катетами равными разности координат центра окружности и точки и тогда гипотенуза и будет растоянием от центра окружности до точки.

Полученное значение необходимо сравнить с радиусом.

Возможно я что то напутал, но по-моему так smile ...


--------------------
Слава Україні!
PM MAIL   Вверх
DarkProg
Дата 22.4.2010, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

Репутация: 4
Всего: 19



Элементарно.
У вас ведь есть уравнение окружности.
И есть две точки которые являются координатами конца отрезка.
Если отрезок лежит внутри круга, то если подставить координаты одного конца то у вас должно получится значение меньшее квадрата радиуса, и если для второго конца отрезка выполняется это же условие, то весь отрезок лежит внутри окружности.
А узнать все или не все отрезки внутри окружности, то это просто всё условие проверки засовываете в цикл и проверяются все отрезки поочереди.
Для уменьшения числа итераций сразу же проверяйте условие и ищите длину каждого отрезка.

Нахождение минимального числа из множества чисел, описано в любом учебнике по программированию.

Ну вот чуток опередили :(

Это сообщение отредактировал(а) DarkProg - 22.4.2010, 22:20


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
Fringe
Дата 22.4.2010, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 6.4.2010

Репутация: нет
Всего: нет



минимальную длину можно так проверить же?
Код

function min_dl (T:array of real):boolean;
var i:integer; dl,dlmin:real;
begin
 dl:=9999;
  for i := 1 to high(t) do  begin
   dl:=sqrt(sqr(T[i].x-T[i-1].x)+sqr(t[i].y-t[i-1].y));
   if dl<dlmin then
   dl:=dlmin;
  end;
end;

PM MAIL   Вверх
Fringe
Дата 22.4.2010, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 6.4.2010

Репутация: нет
Всего: нет



DarkProg,
Код

function vhd_v_okr(T:array of otr):boolean;
 var i:integer; dl:real;
begin  result:=true;
 for i:=0 to High(T) do
 begin
    if ((sqr(T[i].x1)+sqr(t[i].y1)<sqr(T[i].radr)) and
     (sqr(T[i].x2)+sqr(t[i].y2)<sqr(T[i].radr))) then
   result:=false;
   break;
 end;
end;


Правильно я понял?
PM MAIL   Вверх
DarkProg
Дата 23.4.2010, 20:02 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

Репутация: 4
Всего: 19



Не правильно, должно быть так
Код

function vhd_v_okr(T:array of otr):boolean;
 var i:integer; dl:real;
begin  
result:=true;
for i:=0 to High(T) do
  begin
     if ((sqr(T[i].x1)+sqr(t[i].y1))>sqr(T[i].radr)) and ((sqr(T[i].x2+sqr(t[i].y2))>sqr(T[i].radr)) then 
        begin
          result:=false;
          break;
        end;
  end;
end;


А вообще неужели вам сложно нарисоваь простой пример на листочке с бумагой и посмлтреть правильно ли работает программа или нет???
И в случае ошибок просто вручную проверить где и на каком этапе получается ошибка, или же трассировкой посмотреть.

С длинной вроде верно smile

Кстати существуют такие константы типа Max_Real,  Max_Int т.п. это весьма удодобно если вам заранее нужно придать очень большое значение переменной.

Совет на будущее, оформляйте код в более удобном виде, как для себя так и для тех кто будет смотреть ваш код.
Обычно ступенчатый вид кода очень удобен, потому что сразу видно что у вас в цикле а что вне его, а равнозначные операторы старайтесь писать на одной линии, и если у вас в условии нет альтернативы(ну т.е. else )то пишите в строчку, IMHO так лучше.


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
Fringe
Дата 23.4.2010, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 6.4.2010

Репутация: нет
Всего: нет



DarkProg, спасибо!

Совет приму на заметку smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0798 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.