Почему мои дочерние узлы не центрированы над родительскими узлами в радиальном дереве? - PullRequest
0 голосов
/ 27 февраля 2020

Используя алгоритм из этого ответа здесь Мне удалось создать радиальное дерево с точками, которые представляют каждый узел. Проблема в том, что дочерние узлы не центрированы на родительском и несколько смещены. Я видел, что в приведенном выше ответе была похожая проблема, но даже после ее реализации кажется, что дети не находятся в центре внимания. Я неправильно делаю перевод? Я не слишком знаком со всеми плюсами и минусами C ++, но я дошел до этого.

У меня есть предыдущий вопрос , который я задал, который связан с этим, но не тот же вопрос. Я хочу обновить ответ, как только это будет решено, чтобы другие могли знать, что делать.


from anytree import Node, RenderTree
import math

#Start setting positions from node, starting from root tree object.
def RadialPositions(node):

    # Set root to x=0, y=0, if not already set.
    if node.is_root:
        node.positions = (0, 0)

    #Number of children in current node
    nChildren = len(node.children)

    #Rotate child to above parent
    def rotate_node(x, y, nangle):
        nx = x * math.cos(nangle) - y * math.sin(nangle)
        ny = x * math.sin(nangle) + y * math.cos(nangle)
        return nx, ny

    # For every child, set angle
    for idx, child_node in enumerate(node.children, start=1):

        #Adjust from parent degree
        centerAdjust = 0

        # If node has a parent, adujust to center
        if node.parent:
            centerAdjust = (-node.angleRange + node.angleRange / nChildren) / 2

        ##Set child node angle and max angle range
        child_node.nodeAngle = node.nodeAngle + node.angleRange / nChildren * idx + centerAdjust
        child_node.angleRange = node.angleRange / nChildren

        #Set positions
        x = rotate_node(40 * child_node.depth, 0, child_node.nodeAngle)[0]
        y = rotate_node(40 * child_node.depth, 0, child_node.nodeAngle)[1]


        child_node.positions = (3 * x, 3 * y)

        # For each child of child, iterate same process
        RadialPositions(child_node)


enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...