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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.02.2012, 23:24   #1
snpccvs
 
Аватар для snpccvs
 
Регистрация: 08.02.2012
Сообщений: 4
По умолчанию Алгоритм решения задачи

Задача.
В кубе с ребром 150 мм случайным образом (по Методу Монте-Карло) требуется разместить ровно 2800 точек. Эти точки должны быть расположены не ближе 12 мм одна от другой.
В решении должны быть выданы координаты центра (x, y, z) всех точек.
Как решить?
snpccvs вне форума Ответить с цитированием
Старый 09.02.2012, 09:24   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Вы просили алгоритм
Цитата:
требуется разместить ровно 2800 точек.
берем массив [1..2800] чего-то.
Цитата:
В кубе
трехмерные координаты record x,y,z: integer; end;
Цитата:
с ребром 150 мм случайным образом (по Методу Монте-Карло)
случайным образом выбираем точку
r.x:=randdom(150);
r.y:=random(150);
r.z:=random(150);

Цитата:
расположены не ближе 12 мм одна от другой
нужна будет формула вычисления расстояния между двумя точками.
(школьный учебник геометрии)
проверяем нашу точку на выполнение условия со всеми уже найденными (внесенными в массив).
Если хотя бы одно не выполнено, то берем новую точку (возвращаемся к random).
если все условия выполнены вносим точку в массив на свободное место.
Если есть свободные места, то берем новую точку(возвращаемся к random).
Если свободных мест нет, то мы СДЕЛАЛИ!
P.S.есть некоторые сомнения, что мы сумеем дойти до конца.
(150/12)^3 =1953,125 < 28000 (в десятки раз!)
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 09.02.2012 в 09:33.
evg_m вне форума Ответить с цитированием
Старый 09.02.2012, 10:36   #3
gorodilov
Новичок
Джуниор
 
Регистрация: 09.02.2012
Сообщений: 1
По умолчанию

P.S.есть некоторые сомнения, что мы сумеем дойти до конца.
присоединяюсь
gorodilov вне форума Ответить с цитированием
Старый 09.02.2012, 16:22   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
P.S.есть некоторые сомнения, что мы сумеем дойти до конца.
оценка сверху = 4698,9701173166638409084086716918
каждая точка занимает шар с радиусом половина минимального рассояния.(12/2 =6)
шары могут выступать за границу куба на размер своего радиуса.(точки на грани куба).
Объем увеличенного куба / объем одного шара = смотри выше.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 09.02.2012 в 16:28.
evg_m вне форума Ответить с цитированием
Старый 10.02.2012, 21:57   #5
snpccvs
 
Аватар для snpccvs
 
Регистрация: 08.02.2012
Сообщений: 4
По умолчанию

Спасибо за ответы. В основном все понятно. Забыл еще одно условие указать: точки и от граней куба должны отстоять на 6 мм.
Цитата:
P.S.есть некоторые сомнения, что мы сумеем дойти до конца.
присоединяюсь
Должны дойти до конца. Ведь точек 2800, а можно разместить примерно 3300 (объем уменьшенного куба).

И еще вопрос: как задать, чтобы точки были не ближе 6 мм к граням куба?

Извиняюсь за дилетантские на взгляд программиста вопросы. Сам начинаю. Времени немного, а спросить рядом не у кого.
И еще: подскажите, в какой программе это лучше реализовать?
Цитата:
нужна будет формула вычисления расстояния между двумя точками.
(школьный учебник геометрии)
проверяем нашу точку на выполнение условия со всеми уже найденными (внесенными в массив)
Формула для расстояния известна: корень из суммы квадратов разности между соответствующими координатами. Каким образом можно задать, чтобы сверялись расстояния по координатам с уже внесенными в массив точками?
snpccvs вне форума Ответить с цитированием
Старый 10.02.2012, 22:35   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
И еще вопрос: как задать, чтобы точки были не ближе 6 мм к граням куба?
самый простой способ это просто проверить
если в граничной области (r.x<6) or (r.x>150-6), то выбрать новую точку
аналогично для y z.

Цитата:
Каким образом можно задать, чтобы сверялись расстояния по координатам с уже внесенными в массив точками?
Код:
t:=mas[j];
l:=(r.x-t.x)*((r.x-t.x)) +(r.y-t.y)*(r.y-t.y) +(r.y-t.y)*(r.y-t.y);
if l<12*12
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 10.02.2012 в 22:43.
evg_m вне форума Ответить с цитированием
Старый 10.02.2012, 22:54   #7
snpccvs
 
Аватар для snpccvs
 
Регистрация: 08.02.2012
Сообщений: 4
По умолчанию

Спасибо большое!
evg_m
А приведенный код какой программы?
snpccvs вне форума Ответить с цитированием
Старый 13.02.2012, 09:02   #8
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
А приведенный код какой программы?
те три строчки это
1.берем точку из массива.
2.вычисляем расстояние от этой точки до нашей (той которую проверяем).
3.проверяем выполнение условия расстояние межу точками <!2
вернее мы проверяем равносильное условие квадрат расстояния <12*12 (двенадцать в квадрате).
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 13.02.2012, 22:50   #9
snpccvs
 
Аватар для snpccvs
 
Регистрация: 08.02.2012
Сообщений: 4
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
те три строчки это
1.берем точку из массива.
2.вычисляем расстояние от этой точки до нашей (той которую проверяем).
3.проверяем выполнение условия расстояние межу точками <!2
вернее мы проверяем равносильное условие квадрат расстояния <12*12 (двенадцать в квадрате).
Спасибо! Понятно!
snpccvs вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужен алгоритм решения задачи!!!!!! Катя21 Помощь студентам 2 03.01.2012 13:14
Алгоритм решения задачи на графы в С++ Fiamma Помощь студентам 6 06.11.2011 00:11
Открыт ли алгоритм для решения этой задачи? Ru_DoLF Помощь студентам 0 19.03.2011 20:17
Разработать алгоритм и программу решения задачи с использованием Jereme Паскаль, Turbo Pascal, PascalABC.NET 6 07.05.2009 14:06