Autor Zpráva
návštěvník
Profil *
Pracuji na rozšíření knihovny springy.js http://getspringy.com/demo.html
Aktuálně tuto knihovnu využívám k vykreslení stromu ikon. Bude to fungovat tak, že když myší najedu na ikonu, tak vnořené uzly se rozbalí a vykreslí kolem té ikony. To co teď řeším, že potřebuji vypočítat středové souřadnice pro vnořené ikony (uzly). Z nějakého důvodu se tu nepracuje s celými čísly ale s floaty. To co ten program dělá aktuálně je, že vypočítá náhodně souřadnice kdekoliv na canvas a tam umístí ikonu. Ty ikony/uzly se pak sami mají k sobě přitáhnout, aby obkružovaly kolem sebe. Když ale nastavím větší hustotu prostředí tak to ne zcela funguje. Proto potřebuju nastavit ty souřadnice hned na začátku. Nejdříve jsem si říkal, že bych to mohl udělat ručně:

Příklad:
graph.addNodes( null, ['Nejoblíbenější kruhy'], true, false, [[0,1.0]]); 
Nejdříve vytvořím uzel "Nejoblíbenější kruhy", uzel je zobrazen, uzel není vybrán.

graph.addNodes("Nejoblíbenější kruhy", ['Společnost', 'Venkovní aktivity', 'Domácí aktivity', 'Sex', 'Alternativní styl'], true, false, [[-2.0,1.0],[0,3.0],[2.0,1.0],[-1.5,-2.0],[1.5,-2.0]]);
Do uzlu "Nejoblíbenější kruhy" vytvořím uzly: 'Společnost', 'Venkovní aktivity', 'Domácí aktivity', 'Sex', 'Alternativní styl', které zobrazím, a nebudou vybrané. Posledním argumentem jsou pozice pro jednotlivé uzly. Znaménko minus znamená pozice doleva nebo nahoru od jakéhosi středu. Takže platné hodonty jsou -x až +x, -y až +y. Ideální vzdálenost od středu pro 4 ikony je myslím kolem 1.5 až 2.5 (závisí od velikosti ikon a já používám velké).

Další příkazy mi ještě vytváří další uzly pod Společnost a pod Venkovní aktivity:
graph.addNodes( "Společnost", ['Hudba a tanec', 'Kultura', 'Vzdělávání', 'Práce',  'Politika', 'Náboženství' ],true,false,              [[-1.4,1.0],[0.9,2.4],[-0.7,2.2],[-0.7,-0.7],[0.7,-0.8],[1.0,1.0]]);
graph.addNodes( "Venkovní aktivity", ['Sport', 'Cestování', 'Turistika', 'Příroda' ],false);

Co bych potřeboval vytvořit funkci, která ty čísla vypočítá automaticky v závislosti na tom kolik tam je uzlů. Když je uzlů více, tak bude větší vzdálenost. když je uzlů kolem 6ti tak už bych dal vzdálenost 2.0 při větším počtu tak 3.0. Můj největší problém je jak vypočítat vzdálenosti mezi ikonama aby se nepřekrývaly ty ikony. Moje ikony mají 72px. Musím ještě upřesnit, že několik prvních ikon si nastavím ručně a to do třetí úrovně, ale jak ty úrovně pokračují dále tak už by to bylo komplikované. Proto bych chtěl funkci, aby se to vypočítalo samo. Je to vše relativně, takže si dosadím pozici středové ikony (rodičovského uzlu) a k té bych pak připočetl ty výsledky abych získal správnou pozici na canvasu.

Takže vlastně jde nejen o to vypočítat souřadnice ale taky o to vypočítat poloměr kružnice...
mimochodec
Profil
Asi víš, že kružnice je dána takto:
x=sin(n)
y=cos(n)

kde n = <0, 2pí)
x a y se pohybují od -1 do +1. Vynásob je požadovaným poloměrem. Nerozumím, co potřebuješ k tomuto navíc.
_es
Profil
Alebo okrem goniometrických funkcií je možné vychádzať z rovnice kružnice x² + y² = r², kde r je polomer.
mimochodec
Profil
A jinak bych ještě dodal takový primitivní výpočet, protože nevím přesně, jestli ta otázka nesměřuje k němu.

Jestliže ikona je čtverec o straně a, jejím největším rozměrem při umístění na kružnici je diagonála, která měří sqr(2) a. Pokud mám zkonstruovat kružnici, kam se s jistotou vejde x ikon, musí mít obvod sqr(2) a x, poloměr tedy dělá sqr(2) a x / 2 pí. Toto bych určitě nepočítal v každém jednom případu, spočítal bych si sqr(2) / 2 pí (nebo bych tam zahrnul i ten rozměr ikony, pokud ho nehodláš měnit) a pak to používal jako konstantu.
snazimse
Profil
mimochodec:

kde n = <0, 2pí)

Já jen ze zvědavosti, asi jsem to už zapomněl. To funguje jak, vztah je n je menší než 0,2pí? Můžu najít někde příklad? Díky!
Alphard
Profil
Interpretovat znak „<“ jako „menší“ je v tomto případě chybné. Zápisem „<0, 2pí)“ je myšlen zleva uzavřený a zprava otevřený interval od 0 do 2*pi.
snazimse
Profil
Alphard:

Aha, to je myšleno jako interval, to mi nedošlo. Takže to znamená v podstatě interval od 0 po 6.28 s nějakým neukončeným zápisem.
Díky
Kubo2
Profil
snazimse:

Nie, znamená to, že $n >= 0 && $n < 2*M_PI.
návštěvník
Profil *
mimochodec:
ikona sice je čtvercová, ale vzhled je kulatý protože je tam alfa kanál. Spočítat to předem asi ne když vezmeš v úvahu že obvod musí být přizpůsoben počtu vnořených uzlů +1 ... To na konci je prostor kolem rodičovského uzlu. Výpis na kružnici jsem už dělal hodně dávno a už se mi to vypařilo z hlavy. Možná někde zkusím najít pro inpiraci script na výpis rysek radixu.
mimochodec
Profil
návštěvník:
ikona sice je čtvercová, ale vzhled je kulatý protože je tam alfa kanál.

Kdybys to potřeboval lepit přesně na sebe, zajímal by tě rozměr napřesno. Jestli potřebuješ, aby se to vešlo, stačí ti vyjít z té diagonály.


Spočítat to předem asi ne když vezmeš v úvahu že obvod musí být přizpůsoben

sqr(2) / 2 pí
Přinejmenším toto bude konstantní.
Zbytku toho příspěvku nerozumím.
návštěvník
Profil *
Ještě je tam pod tím popisek pokud je zapnutý ale to není důležité. Ještě budu muset spočítat úhel mezi rodičovským uzlem a nejvyšším uzlem abych věděl od jakého úhlu budu vykreslovat ty uzly. Chápu že goiniometrické funkce, ale ještě jsem to do toho nepustil. Dneska už mám plnou hlavu.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: