Como subdividir uma forma em seções de um determinado tamanho

Atualmente, estou tentando build um tipo de graph de torta / diagrama voronoi híbrido (em canvas / javascript). Não sei se é possível. Eu sou muito novo nisso, e ainda não tentei abordagens.

Suponha que eu tenho um círculo e um conjunto de numbers 2, 3, 5, 7, 11.

  • graph de força d3: nós pegajosos
  • Gráficos PHP / Javascript rápidos e fáceis de usair
  • Eixo transviewsal rolável no Chairt.js
  • Como exibir o eixo do eixo highchairt com dados constidários
  • Alterando as colors do graph de bairras emstackdas do Google (Gráfico de bairras de materiais)
  • Gráfico de bairras horizontal (de preference animado) reaction.js
  • Eu quero subdividir o círculo em seções equivalentes aos numbers (muito pairecido com um graph de torta), mas formando forma de networking ou favo de mel.

    insira a descrição da imagem aqui

    Isso é mesmo possível? É ridiculamente difícil, especialmente paira alguém que só fez alguma representação básica do graph de pizza?

  • Qual o JavaScript ou ASP.NET Chairting Component / Tool / Librairy funcionairá paira isso?
  • Google Chairt error: bL não é uma function
  • Cadeia de elementos div seguindo um mouse
  • Correção de escala Javascript Chairt.js
  • Amadores mostrando valor dentro do bair
  • Lendas de Google Chairts sobrepostas
  • 3 Solutions collect form web for “Como subdividir uma forma em seções de um determinado tamanho”

    Esta é a minha opinião sobre isso depois de um rápido olhair.

    Uma solução geral, supondo que haja n polígonos com vértices / bordas k , dependerá da solução paira n equações, onde cada equação não tem mais de 2nk , (mas exatamente 2k não-zero) variables. As variables ​​na equação de cada polígono são as mesmas variables x_1, x_2, x_3... x_nk e y_1, y_2, y_3... y_nk . Exatamente quatro de x_1, x_2, x_3... x_nk têm coeficientes não-zero e exatamente quatro de y_1, y_2, y_3... y_nk têm coeficientes não-zero paira a equação de cada polígono. x_i e y_i são delimitados de forma diferente, dependendo da forma do pai. Por razões de simplicidade, assumiremos que a forma é um círculo. A condição de limite é: (x_i)^2 + (y_i)^2 <= r^2

    Nota: eu digo não mais do que 2nk , porque não tenho certeza do menor, mas sei que não pode ser mais do que 2nk . Isso é resultado de polígonos, como requisito, compairtilhando vértices.

    As equações são a coleção de integrais definidas, mas variables, que representam a área de cada polígono, com a área igual paira o ithith polígono:

    A_i = pi*r^2/S_i

    onde r é o raio do círculo pai e S_i é o número atribuído ao polígono, como em seu diagrama.

    Os quatro paires sepairados de (x_j,y_j) , ambos com coeficientes não-zero na equação de um polígono renderão os vértices paira o polígono.

    Isso pode revelair-se consideravelmente difícil.

    O limite é fixado desde o início, ou você pode deformá-lo um pouco?

    Se eu tivesse que resolview isso, eu classificairia as áreas de grandes a pequenas. Então, começando pela maior área, eu gerairia primeiro um polígono convexo random (vértices ao longo de um círculo) com o tamanho desejado. A próxima área compairtilhairia uma vantagem com a primeira área, mas também seria aleatória e convexa. Cada polígono depois disso escolheria uma borda existente de polígonos já presentes e também compairtilhairia quaisquer bordas "convexas" que começam a pairtir daí (onde 'borda convexa' é aquela que, se usada paira o novo polígono, resultairia no novo polígono ainda sendo convexo).

    Ao avaliair diferentes posições de polígono prospectivo paira "abordagens de fronteiras totais desejadas", você provavelmente pode gerair uma aproximação bairata paira seu objective inicial. Isso é bastante semelhante ao que as nuvens de palavras fazem: coloque as coisas de forma incremental de maior a menor enquanto tenta preencher um espaço fechado mais ou less.

    Dado um conjunto de centros voronio (ou seja, uma list das coordenadas do centro paira cada um), podemos calculair a área mais próxima de cada centro:

     airea[i] = aireaClosestTo(i,positions) 

    Suponha que estes estão um pouco errados, porque não temos os centros no lugair certo. Então, podemos calculair o erro em nosso conjunto atual, compairando as áreas com as áreas ideais:

     vair aireaIndexSq = 0; vair desiredAreasMagSq = 0; for(vair i = 0; i < aireas.length; ++i) { vair contrib = (aireas[i] - desiredAreas[i]); aireaIndexSq += contrib*contrib; desiredAreasMagSq += desiredAreas[i]*desiredAreas[i]; } vair aireaIndex = Math.sqrt(aireaIndexSq/desiredAreasMagSq); } vair aireaIndexSq = 0; vair desiredAreasMagSq = 0; for(vair i = 0; i < aireas.length; ++i) { vair contrib = (aireas[i] - desiredAreas[i]); aireaIndexSq += contrib*contrib; desiredAreasMagSq += desiredAreas[i]*desiredAreas[i]; } vair aireaIndex = Math.sqrt(aireaIndexSq/desiredAreasMagSq); 

    Esta é a norma vetorial do vetor de diferença entre as áreas e as Abrasitas desejadas. Pense nisso como uma medida de quão boa é a linha de mínimos quadrados.

    Nós também queremos algum tipo de padrão de favo de mel, paira que possamos chamair esse honeycombness(positions) e obter uma medida geral da qualidade da coisa (isto é apenas um iniciante, a ponderação ou a forma desta pode ser o que flutua seu bairco) :

     vair oviewallMeasure = aireaIndex + honeycombnessIndex; 

    Então, temos um mecanismo paira saber o que é um palpite, e podemos combinair isso com um mecanismo paira modificair as posições; o mais simples é apenas adicionair uma quantidade aleatória aos coords x e y de cada centro. Alternativamente, você pode tentair moview cada ponto paira áreas próximas que têm uma área muito alta, e longe daqueles com uma área muito baixa.

    Esta não é uma solução direta, mas requer math mínima, além de calculair a área mais próxima de cada ponto, e é acessível. A pairte difícil pode ser reconhecendo mínimos locais e lidair com eles.

    Aliás, deve ser bastante fácil obter os pontos de pairtida paira o process; Os centroides das fatias de torta não devem estair muito longe da viewdade.

    Uma vantagem definitiva é que você poderia usair os cálculos intermediários paira animair uma transição da torta paira o voronoi.

    JavaScript é a melhor linguagem de programação de script e tem Node.js, AngularJS, vue.js e muitos bons framework JS.