【问题标题】:Why aren't my child nodes centered above the parentnodes in radial tree?为什么我的子节点不在径向树的父节点上方居中?
【发布时间】:2020-02-27 01:08:13
【问题描述】:

使用这个答案here 中的算法,我能够创建一个径向树,其中的点代表每个节点。问题是子节点没有以父节点为中心并且有些偏移。我在上面的答案中看到了类似的问题,但即使在实施之后,它似乎也没有让孩子们集中注意力。我翻译错了吗?我对 C++ 的所有细节都不太熟悉,但我已经走到了这一步。

我以前问过question,与此有关,但不是同一个问题。解决此问题后,我想更新答案,以便其他人知道该怎么做。


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)


【问题讨论】:

    标签: python math tree nodes


    【解决方案1】:

    通过将枚举设置为 0 而不是 1 来解决此问题。这会导致节点偏移 1 而不是自然父节点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多