3DCenter.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Reply to this topicStart new topic
> Заполнить объем окружностями
cad
сообщение 29/03/2017, 22:58
Сообщение #1


Наш человек
Иконка группы

Группа: Пользователи
Сообщений: 490
Регистрация: 02/10/2006
Из: Харьков
Пользователь №: 37 887



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

Go to the top of the page
 
+Quote Post
Jahman
сообщение 30/03/2017, 02:04
Сообщение #2


уже всё сделал
Иконка группы

Группа: Пользователи
Сообщений: 2 456
Регистрация: 01/06/2005
Из: z3л3№гр@d
Пользователь №: 13 838



sphere packing или нужно 2d?

Сообщение отредактировал Jahman - 30/03/2017, 02:04
Go to the top of the page
 
+Quote Post
cad
сообщение 30/03/2017, 12:43
Сообщение #3


Наш человек
Иконка группы

Группа: Пользователи
Сообщений: 490
Регистрация: 02/10/2006
Из: Харьков
Пользователь №: 37 887



да, нужно 2D, ну или получить 3D из цилиндров, чтоб сделать потом шейп
Go to the top of the page
 
+Quote Post
Jahman
сообщение 30/03/2017, 14:47
Сообщение #4


уже всё сделал
Иконка группы

Группа: Пользователи
Сообщений: 2 456
Регистрация: 01/06/2005
Из: z3л3№гр@d
Пользователь №: 13 838



типа такого что-ли?
multi-scatter и тп тулзы за долю секунды такое сделают, с куда лучшей упаковкой
Прикрепленные изображения
Прикрепленное изображение Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
cad
сообщение 30/03/2017, 14:51
Сообщение #5


Наш человек
Иконка группы

Группа: Пользователи
Сообщений: 490
Регистрация: 02/10/2006
Из: Харьков
Пользователь №: 37 887



Вот что нашел

https://forums.adobe.com/thread/732621
Go to the top of the page
 
+Quote Post
cad
сообщение 30/03/2017, 14:54
Сообщение #6


Наш человек
Иконка группы

Группа: Пользователи
Сообщений: 490
Регистрация: 02/10/2006
Из: Харьков
Пользователь №: 37 887



Цитата(Jahman @ 30/03/2017, 13:47) *
типа такого что-ли?
multi-scatter и тп тулзы за долю секунды такое сделают, с куда лучшей упаковкой


Да, типа такого, только нужно чтоб окружности не пересекали контур площади, а были касательны ему и друг другу. Можно так сделать?
Go to the top of the page
 
+Quote Post
Jahman
сообщение 30/03/2017, 15:07
Сообщение #7


уже всё сделал
Иконка группы

Группа: Пользователи
Сообщений: 2 456
Регистрация: 01/06/2005
Из: z3л3№гр@d
Пользователь №: 13 838



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

upd. тока что проверил на просроченной демке короны.
скаттер работает, так-что можно им такое сделать, правда придется таки немного вручную почистить края.

Сообщение отредактировал Jahman - 30/03/2017, 15:23
Go to the top of the page
 
+Quote Post
Jahman
сообщение 01/04/2017, 10:11
Сообщение #8


уже всё сделал
Иконка группы

Группа: Пользователи
Сообщений: 2 456
Регистрация: 01/06/2005
Из: z3л3№гр@d
Пользователь №: 13 838



https://www.youtube.com/watch?v=Ifcc7ubG8DM


Сообщение отредактировал Jahman - 01/04/2017, 10:14
Go to the top of the page
 
+Quote Post
cad
сообщение 04/04/2017, 12:11
Сообщение #9


Наш человек
Иконка группы

Группа: Пользователи
Сообщений: 490
Регистрация: 02/10/2006
Из: Харьков
Пользователь №: 37 887



Цитата(Jahman @ 01/04/2017, 09:11) *


Спасибо! Попробую. По наводке нашел https://en.wikipedia.org/wiki/Circle_packing , оказывается, известная задача)
Go to the top of the page
 
+Quote Post
industrialudaf
сообщение 04/04/2017, 13:39
Сообщение #10


▄▀▄▀▄▀▄▀▄
Иконка группы

Группа: Пользователи
Сообщений: 1 551
Регистрация: 31/10/2009
Пользователь №: 73 967



С третей минуты.
https://www.youtube.com/watch?v=c9_vNtQGUUA
Go to the top of the page
 
+Quote Post
cad
сообщение 04/04/2017, 14:03
Сообщение #11


Наш человек
Иконка группы

Группа: Пользователи
Сообщений: 490
Регистрация: 02/10/2006
Из: Харьков
Пользователь №: 37 887



Цитата(industrialudaf @ 04/04/2017, 12:39) *
С третей минуты.
https://www.youtube.com/watch?v=c9_vNtQGUUA


тоже нашел, изучаю грасхопер)
Go to the top of the page
 
+Quote Post
BorisK
сообщение 04/04/2017, 14:53
Сообщение #12


Давно уже
Иконка группы

Группа: Координатор
Сообщений: 9 675
Регистрация: 24/06/2002
Из: Зеленоград
Пользователь №: 158



Цитата(cad @ 04/04/2017, 14:03) *
Цитата(industrialudaf @ 04/04/2017, 12:39) *
С третей минуты.
https://www.youtube.com/watch?v=c9_vNtQGUUA


тоже нашел, изучаю грасхопер)


Ну, можно изучать и MGC smile.gif http://www.scriptspot.com/3ds-max/mcg/mcg-pixelize-spline
Go to the top of the page
 
+Quote Post
industrialudaf
сообщение 04/04/2017, 16:16
Сообщение #13


▄▀▄▀▄▀▄▀▄
Иконка группы

Группа: Пользователи
Сообщений: 1 551
Регистрация: 31/10/2009
Пользователь №: 73 967



Цитата
Ну, можно изучать и MGC

Думаю, Борис, там, в скрипте, нету Пи, что бы масса окружностей "притёрались" друг к другу в замкнутом пространстве.
Go to the top of the page
 
+Quote Post
BorisK
сообщение 06/04/2017, 13:23
Сообщение #14


Давно уже
Иконка группы

Группа: Координатор
Сообщений: 9 675
Регистрация: 24/06/2002
Из: Зеленоград
Пользователь №: 158



Если там покопаться то и Пи туда ввести можно.
Go to the top of the page
 
+Quote Post
Jahman
сообщение 06/04/2017, 16:57
Сообщение #15


уже всё сделал
Иконка группы

Группа: Пользователи
Сообщений: 2 456
Регистрация: 01/06/2005
Из: z3л3№гр@d
Пользователь №: 13 838



у меня почти получилось через pflow data operator сделать
ниже вариант без учета границ. вариант с учетом коллизий границ куда нетривиальнее, даже не знаю как подступиться

CODE
gc()
try ( delete circles ) catch()
obj = if $text001 == undefined then (convertToMesh (text text:"Q" italic:true)) else $text001
circles = #()
r = ray [0,0,0] [0,0,-1]

circlesCount = 500    
minR = 1.0
maxR = 2.0





fn handleCircleCollisions obj nodes gap:0.03 = (

    collisions = [0,0]
    collides = false
    for n in nodes while not collides where n != obj and (d = distance obj.pos n.pos) < (obj.radius + n.radius) do (

        collides = true
        n.pos += (normalize((n.pos - obj.pos) * [1,1,0])) * ( obj.radius + n.radius - d + gap)

        collisions.x += 1
        handleCircleCollisions n nodes
            
    )
        
    collisions.x

)


do (
    
    r.pos = (random obj.min obj.max) + [0,0,999]
    pt = intersectRay obj r
    
    if pt != undefined do (
        
        append circles (circle pos:pt.pos radius:(random minR maxR) wirecolor:yellow)    
        
    )
    
) while circles.count < circlesCount

with undo off (
    
do (
    redrawViews()
    windows.processPostedMessages()    
    collisionsCount = 0
    
    for c in circles do collisionsCount += handleCircleCollisions c circles

) while not keyboard.controlPressed and collisionsCount > 0

)
messageBox "ready"


Сообщение отредактировал Jahman - 06/04/2017, 16:58
Go to the top of the page
 
+Quote Post
Bots
сообщение Системное сообщение






2 страниц V   1 2 >
Reply to this topicStart new topic

1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 19/03/2024 - 12:35