Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];

Вниз

Непересекающиеся окружности   Найти похожие ветки 

 
sinful   (2005-06-29 17:07) [0]

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


 
gydvin   (2005-06-30 06:40) [1]

На мой взгляд прямоуголиник разбить на одинаковые секции согласующиеся с размером окружности, координаты секций хранить в массиве, также в массиве оставить место под одну запись типа 1-0 типа есть окружность-нету, случайным образом заполнять эту запись а потом из массива все отрисовывать.


 
Чай толпой   (2005-06-30 09:35) [2]


> прямоуголиник разбить на одинаковые секции согласующиеся
> с размером окружности,

нет
таких областей очень много, в идеале - счетное мн-во
т.е. случайность будет сильно ограничена

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


 
Kerk ©   (2005-06-30 10:08) [3]

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


 
имя   (2005-06-30 11:24) [4]

Удалено модератором


 
Kerk ©   (2005-06-30 11:39) [5]

Ок. Как старый олимпиадник вставлю еще 10 копеек :)

Пусть DX,DY - размеры прямоуголника, R - радиус окружностей.
Тогда SX := DX/2R; SY := DY/2R;
Берем массив Centers: array [0..SX-1,0..SY-1] of Boolean;

CirclesCount = ...;
repeat
 TmpX := Random(SX); TmpY := Random(SY);
 if not Centers[TmpX,TmpY] then
 begin
   Centers[TmpX,TmpY] := True;
   Dec(CirclesCount);
 end;
until CirclesCount = 0;


Теперь рисуем окружности.
for i := 0 to SX-1 do
 for j := 0 to SY-1 do
   if Centers[i,j] then Canvas.Ellipse(i*R, j*R, i*(R+1), j*(R+1));

В общем как-то так. Писалось на скорую руку, но, надеюсь, идея ясна.


 
Kerk ©   (2005-06-30 11:40) [6]

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


 
Kerk ©   (2005-06-30 11:42) [7]


>    if Centers[i,j] then Canvas.Ellipse(i*R, j*R, i*(R+1), j*(R+1));

!!!
if Centers[i,j] then Canvas.Ellipse(i*R, j*R, (i+1)*R, (j+1)*R); конечно


 
gydvin   (2005-06-30 11:43) [8]

Да это автор должен более потробно обьяснить чего он хочет добиться


 
имя   (2005-06-30 11:50) [9]

Удалено модератором


 
Kerk ©   (2005-06-30 12:03) [10]

Точка - это окружность с диаметром 1 пиксель. У нас окружности с диаметром 2R.
Как-то можно на таком масштабировании алгоритм построить. Надо обдумать. Но видимо придется вещественные координаты вводить. Не пойдет так.


 
имя   (2005-06-30 12:10) [11]

Удалено модератором


 
gydvin   (2005-06-30 14:24) [12]

А если как в [3], только предвигаться не случайным образом а допустим попиксельно или более, а вот окружность уже рисовать или нет выбирать случайно и если отрисовал следущий шаг за два радиуса и такдалее. Но помоему велика вероятность что весь канвас зарисуется окружностями, непроверял


 
имя   (2005-06-30 15:40) [13]

Удалено модератором
Примечание: Не стоит под разными никами писать.


 
Vlad Oshin ©   (2005-06-30 16:06) [14]

прямоугольник - это матрица.
обрезаем матрицу на R со сторон, делая эти эл-ты ее недопустимыми
label:
1. случайно ставим окружность на допустимое значение эл-мента матрицы
2. по ф-ле окружности вычеркиваем все элементы матрицы на удалении 2R.
3. любой из всех  не вычеркнутых элементов - центр следующей окружности
goto label

не для себя же :)


 
Vlad Oshin ©   (2005-06-30 16:08) [15]

приношу извинения, за ошибочность 4, 9, 11, 13
думал что я на другом сайте
исп. самописный клиент



Страницы: 1 вся ветка

Форум: "Media";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.285 c
14-1130065131
nk
2005-10-23 14:58
2005.11.20
Ищу фильм, но не уверен в правильности названия...


9-1120747596
Kobik
2005-07-07 18:46
2005.11.20
проблема с DirectSound


2-1130739102
Fanny
2005-10-31 09:11
2005.11.20
LoadLibrary в XP даёт ошибку


2-1130522535
PUZZZ
2005-10-28 22:02
2005.11.20
Программа для создания и хранения RTF-документов в виде структуры


2-1130435828
Yus
2005-10-27 21:57
2005.11.20
Классы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский