2015-11-24 30 views
12

widziałem this solution który wydaje się dbać o elementy klastrów w ramach „konsekwentny” kształt bez nakładania, ale co jeśli kształt był bardziej niejasne, jak następuje:elementy tworzenie klastrów w kształcie

enter image description here

Moja pierwsza para dźgnie w to, jak się wydaje, uproszczenie kształtu do najbardziej podstawowej postaci, a następnie sprawdzenie czy element znajduje się w rzeczywistych współrzędnych kształtu, ale wydaje się, że Mnóstwo potencjalnych obliczeń, które miałem nadzieję uprościć. Wszelkie przemyślenia byłyby niezwykle cenne. Dzięki!


JS Fiddle dla odniesienia:

var tilesize = 18, tilecount = 15; 
var gRows = Math.floor($(".container").innerWidth()/tilesize); 
var gCols = Math.floor($('.container').innerHeight()/tilesize); 

var vals = _.shuffle(_.range(tilecount)); 
var xpos = _.shuffle(_.range(gRows)); 
var ypos = _.shuffle(_.range(gCols)); 

_.each(vals, function(d,i){ 
    var $newdiv = $('<div/>').addClass("tile"); 
    $newdiv.css({ 
     'position':'absolute', 
     'left':(xpos[i] * tilesize)+'px', 
     'top':(ypos[i] * tilesize)+'px' 
    }).appendTo('.container').html(d); 
}); 

Edytuj

This example ma losowy klastrów wewnątrz określonego kształtu, ale ponieważ kontekście tego kształtu nie jest kwadratem, będę potrzebował wykonać kilka testów na pierwszej konwersji obiektu SVG na element canvas, a następnie uruchomić kod przez coś podobnego.

+0

Być może zamiast dwóch tablic (* po jednej na każdą oś *) można wybrać jedną z parami współrzędnych, które można najpierw filtrować dla tych, które mieszczą się w e kształt, a od tych można losowo wybrać, co chcesz. To byłoby podejście liniowe, które nie musi być ponownie wybierane, dopóki coś nie wpadnie do środka. –

+0

Dzięki za odpowiedź - czy w ogóle widziałeś to na wolności? Próbując zebrać trochę inspiracji dla możliwych sposobów, w jakie można to osiągnąć. – Zach

+0

To naprawdę świetne pytanie. Czy boks dookoła kształtu jest opcją? –

Odpowiedz

6

Spróbuj utworzyć reprezentację ASCII obrazu, csswhite-space zestaw do pre, .html(), String.prototype.replace() z RegExp dopasować dowolny znak w ciąg, element powrócić jako zamiennik dla pasującego znaku w ciągu wejściowego html

$(function() { 
 
    $("div").html(function(index, html) { 
 
    return html.replace(/g/g, function(match) { 
 
     return "<span>" + match + "</span>" 
 
    }) 
 
    }) 
 
})
div { 
 
    font: 8px/4px monospace; 
 
    text-align: center; 
 
    white-space:pre; 
 
} 
 

 
span { 
 
    background-color:dodgerblue; 
 
    color: navy; 
 
    text-shadow: 0.75em 0.75em gold; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div> 
 
                         
 
                       
 
                         
 
                      gggg              
 
                      ggggggggg             
 
                     gggggggggggg             
 
                     ggggggggggggggg             
 
                     ggggggggggggggggg            
 
                     ggggggggggggggggg            
 
                    ggggggggggggggggggg            
 
                    gggggggggggggggggggg            
 
                    gggggggggggggggggggggg            
 
                    ggggggggggggggggggggggg            
 
                   gggggggggggggggggggggggg            
 
                   gggggggggggggggggggggggggg            
 
                   gggggggggggggggggggggggggggg            
 
             gggggggggggggggggggggggggggggggggggggggggggggggggg            
 
             gggggggggggggggggggggggggggggggggggggggggggggggggggg            
 
            gggggggggggggggggggggggggggggggggggggggggggggggggggggg           
 
            gggggggggggggggggggggggggggggggggggggggggggggggggggggg           
 
            ggggggggggggggggggggggggggggggggggggggggggggggggggggggg    ggg       
 
            ggggggggggggggggggggggggggggggggggggggggggggggggggggggg   ggggggggg       
 
            gggggggggggggggggggggggggggggggggggggggggggggggggggggggg  ggggggggggggg      
 
            gggggggggggggggggggggggggggggggggggggggggggggggggggggggg  gggggggggggggggggg      
 
            gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg     
 
            gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg     
 
            ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg     
 
            ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg     
 
            ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg     
 
            gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg     
 
            gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg     
 
            ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg     
 
             gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg     
 
             gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg     
 
             ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg     
 
             gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg     
 
             ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg     
 
             gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg      
 
             ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg      
 
             gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg      
 
             ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg      
 
             gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg       
 
             gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg       
 
             gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg       
 
             ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg        
 
            ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg         
 
            gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg         
 
            ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg          
 
           gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg          
 
           ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg           
 
           gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg           
 
           gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg            
 
          gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg            
 
          ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg            
 
          gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg            
 
          ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg            
 
          ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg            
 
         ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg            
 
         gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg            
 
         ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg           
 
         ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg           
 
         gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg           
 
         ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg          
 
        ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg          
 
        gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg          
 
        gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg          
 
        gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg          
 
        gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg          
 
        gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg          
 
        gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg          
 
        ggggggggggggggggggggggggggggggggggg  gggggggggggggggggggggggggggggggggggg          
 
        ggggggggggggggggggggggggggggggggg   ggggggggggggggggggggggggggggggggggg          
 
        gggggggggggggggggggggggggggggggg   ggggggggggggggggggggggggggggggggg          
 
        gggggggggggggggggggggggggggggg    gggggggggggggggggggggggggggggggg          
 
        ggggggggggggggggggggggggggggg     gggggggggggggggggggggggggggggg          
 
        ggggggggggggggggggggggggggg     gggggggggggggggggggggggggggggg          
 
        gggggggggggggggggggggggggg     gggggggggggggggggggggggggggg          
 
         ggggggggggggggggggggggggg     gggggggggggggggggggggggggggg          
 
         gggggggggggggggggggggggg      gggggggggggggggggggggggggg           
 
         gggggggggggggggggggggg      gggggggggggggggggggggggg           
 
         gggggggggggggggggggg       ggggggggggggggggggggggg           
 
         gggggggggggggggggg       ggggggggggggggggggggg           
 
          gggggggggggggggg        ggggggggggggggggggg            
 
          ggggggggggggg        gggggggggggggggggg            
 
           ggggggggg         ggggggggggggggg            
 
                      gggggggggggg             
 
                      gggggggg             
 
                                     
 
                                     
 
                                     
 
                                                      
 
</div>

+0

jsfiddle https://jsfiddle.net/vybzz4cg/ – guest271314

+0

Wow, wspaniała odpowiedź i naprawdę doceniam przykładowy kod! To zdecydowanie tworzy granice dla obszaru, ale (jedna część mogę dodać do mojego pierwotnego pytania) jest to, że nie zawsze może być wystarczająco dużo elementów, aby wypełnić obszar. Zdecydowanie na właściwej ścieżce. Zacznę grać z tym i zobaczę, gdzie mnie to zaprowadzi. Dzięki! – Zach

Powiązane problemy