Pavlo Myroniuk
продовжую гратися із алгоритмом малювання дерев. я узагальнений алгоритм напишу пізніше, бо не має на нього часу. я вирішив довести до пуття вже написані PoC алгоритмів. я подумав, що якщо я вмію малювати direct предків, то не має проблеми малювати дітей…
image_2026-02-24_23-54-49.png
157.1 KB
Pavlo Myroniuk
я його переписав та узагальнив.
я дуже горжуся як я це абстрагував. просто в клас прокидаються функції, які роблять кроки по графу, але саме обрахування координат міститься тільки в середині імплементації класу: https://github.com/TheBestTvarynka/grafily/blob/feat/direct-ancestors-descendants-tree/src/layout/tree.ts#L69-L88
class ReingoldTilford {
getRightmostChildren: (id: Id, family: Index) => Id | null;
getLeftmostChildren: (id: Id, family: Index) => Id | null;
getChildNodesIds: (currentNode: Id, family: Index) => Id[];
getY: (level: number) => number;
family: Index;
constructor(
getRightmostChildren: (id: Id, family: Index) => Id | null,
getLeftmostChildren: (id: Id, family: Index) => Id | null,
getChildNodesIds: (currentNode: Id, family: Index) => Id[],
getY: (level: number) => number,
family: Index,
) {
this.getRightmostChildren = getRightmostChildren;
this.getLeftmostChildren = getLeftmostChildren;
this.getChildNodesIds = getChildNodesIds;
this.getY = getY;
this.family = family;
}
// ...GitHub
grafily/src/layout/tree.ts at feat/direct-ancestors-descendants-tree · TheBestTvarynka/grafily
Obsidian plugin for rendering family graph (family trees) - TheBestTvarynka/grafily
гляньте що я випадково знайшов: https://github.com/NorthwoodsSoftware/GoJS
GitHub
GitHub - NorthwoodsSoftware/GoJS: JavaScript diagramming library for interactive flowcharts, org charts, design tools, planning…
JavaScript diagramming library for interactive flowcharts, org charts, design tools, planning tools, visual languages. - NorthwoodsSoftware/GoJS
Pavlo Myroniuk
гляньте що я випадково знайшов: https://github.com/NorthwoodsSoftware/GoJS
по-ідеї, воно імплементує один із алгоритмів, що мені треба
Pavlo Myroniuk
гляньте що я випадково знайшов: https://github.com/NorthwoodsSoftware/GoJS
https://gojs.net/latest/samples/ldLayout.html
у них ще є класна демка. треба у себе локально запустити та спробувати внести дані родинного дерева. якщо леяут буде нормальний, тоді варто імплементовувати цей алгоритм
у них ще є класна демка. треба у себе локально запустити та спробувати внести дані родинного дерева. якщо леяут буде нормальний, тоді варто імплементовувати цей алгоритм
gojs.net
Layered Digraph Demonstration of LayeredDigraphLayout Options
Interactive demonstration of hierarchical layout features by the LayeredDigraphLayout class.
Pavlo Myroniuk
https://gojs.net/latest/samples/ldLayout.html у них ще є класна демка. треба у себе локально запустити та спробувати внести дані родинного дерева. якщо леяут буде нормальний, тоді варто імплементовувати цей алгоритм
дуже потужна ліба. тут приклади використання: https://gojs.net/latest/samples/
gojs.net
Samples Index | GoJS
GoJS JavaScript diagram samples for HTML, including many kinds of flowcharts, org charts, BPMN, and other
visual graph types.
visual graph types.
Pavlo Myroniuk
ось так виглядає зараз. я добавив людей та об'єднав дерева батьків та дітей. навіть дітей можна колапсити (ви бачите кнопки мінус на вузлах) стрілочкою вказана starting node
Please open Telegram to view this post
VIEW IN TELEGRAM
gojs.net
Double Tree of Nodes and Links Laid out by TreeLayout in Two Opposite Directions from Root Node
Layout of two trees in opposite directions, assuming a single root, using TreeLayout.
Pavlo Myroniuk
треба у себе локально запустити та спробувати внести дані родинного дерева
як добре що є ai.
клонував репу. тикнув у потрібний sample і сказав написати такий самий, але координати графа захардкодити замість автогенерування.
в принципі, алгоритм працює добре.
там є багато дрібних косяків. дещо не по центру. дещо треба було свапати місцями щоб було норм.
проте свапання можна легко пофіксити власною імплементацією обходу графа. головне що overall layout виглядає нормально та видно зв'язки
клонував репу. тикнув у потрібний sample і сказав написати такий самий, але координати графа захардкодити замість автогенерування.
в принципі, алгоритм працює добре.
там є багато дрібних косяків. дещо не по центру. дещо треба було свапати місцями щоб було норм.
проте свапання можна легко пофіксити власною імплементацією обходу графа. головне що overall layout виглядає нормально та видно зв'язки
Pavlo Myroniuk
як добре що є ai. клонував репу. тикнув у потрібний sample і сказав написати такий самий, але координати графа захардкодити замість автогенерування. в принципі, алгоритм працює добре. там є багато дрібних косяків. дещо не по центру. дещо треба було свапати…
ось так воно мало виглядати
#[instrument(level = "trace"), skip(work)] pinned «Флудилка тваринки, його намагання писати пет-проєкти, щось досліджувати, чи просто займатися фігньою Ті, кого я автоматично додав, можете лівати (я не ображуся). Просто Я замучився кидати усе в 3 різних чати. Буду кидати сюди»
Pavlo Myroniuk
гляньте що я випадково знайшов: https://github.com/NorthwoodsSoftware/GoJS
Погані новини: вчора не додивився що сама бібліотека closed source. Не вийде подивитися як працює їхній алгоритм під капотом. Ну і фіг ними.
Хороші новини: Я знайшов інші імплементації з відкритим кодом
Хороші новини: Я знайшов інші імплементації з відкритим кодом
Pavlo Myroniuk
Я знайшов інші імплементації з відкритим кодом
https://erikbrinkman.github.io/d3-dag/
https://github.com/erikbrinkman/d3-dag
працєю за алгоритмами Sugiyama framework. те, що мені треба.
https://github.com/erikbrinkman/d3-dag
працєю за алгоритмами Sugiyama framework. те, що мені треба.
Pavlo Myroniuk
Я знайшов інші імплементації з відкритим кодом
https://github.com/dagrejs/dagre
згідно їх доки (https://github.com/dagrejs/dagre/wiki#recommended-reading), вони не використовують оригінальний Sugiyama framework. проте спирають на подібні алгоритми. найголовніше, що вони використовують Brandes and Köpf алгоритм для визначення координат. із усього Sugiyama framework, Brandes and Köpf це те, що для мене актуально
також ця ліба інтегрується легко у reactflow (інша ліба, яку я використовую для рендера)
згідно їх доки (https://github.com/dagrejs/dagre/wiki#recommended-reading), вони не використовують оригінальний Sugiyama framework. проте спирають на подібні алгоритми. найголовніше, що вони використовують Brandes and Köpf алгоритм для визначення координат. із усього Sugiyama framework, Brandes and Köpf це те, що для мене актуально
For positioning (or coordinate assignment), we derived our algorithm from Brandes and Köpf, "Fast and Simple Horizontal Coordinate Assignment". We made some adjustments to get tighter graphs when node and edges sizes vary greatly.
також ця ліба інтегрується легко у reactflow (інша ліба, яку я використовую для рендера)
GitHub
GitHub - dagrejs/dagre: Directed graph layout for JavaScript
Directed graph layout for JavaScript. Contribute to dagrejs/dagre development by creating an account on GitHub.
Pavlo Myroniuk
гляньте що я випадково знайшов:
https://js.cytoscape.org/
чим більше риюся тим більше знаходжу ліб для рендера графів. треш скільки їх є
Graph theory (network) library for visualisation and analysis
чим більше риюся тим більше знаходжу ліб для рендера графів. треш скільки їх є
js.cytoscape.org
Cytoscape.js
Graph theory / network library for analysis and visualisation - compatible with CommonJS/Node.js/Browserify/Webpack, AMD/Require.js, npm, Bower, jspm, Meteor/Atmosphere, jQuery, and plain JS/JavaScript
❤2
Forwarded from Pavlo Myroniuk
Ще я дуже люблю аї через те, що набагато легше стало вивчати нові штуки.
Раніше я дофіга часу тратив щоб ознайомитися з якоюсь новою апішкою чи алгоритмом. А зараз воно офігенно пише пояснення і шукає замість мене
Раніше я дофіга часу тратив щоб ознайомитися з якоюсь новою апішкою чи алгоритмом. А зараз воно офігенно пише пояснення і шукає замість мене
Pavlo Myroniuk
Ще я дуже люблю аї через те, що набагато легше стало вивчати нові штуки. Раніше я дофіга часу тратив щоб ознайомитися з якоюсь новою апішкою чи алгоритмом. А зараз воно офігенно пише пояснення і шукає замість мене
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM