इस उत्तर से एल्गोरिथम का उपयोग करना नोड. समस्या यह है कि चाइल्ड नोड्स माता-पिता पर केंद्रित नहीं हैं और कुछ हद तक ऑफसेट हैं। मैंने देखा कि उपरोक्त उत्तर में भी इसी तरह की समस्या थी लेकिन इसे लागू करने के बाद भी यह बच्चों को केंद्रित नहीं कर रहा है। क्या मैं गलत अनुवाद कर रहा हूँ? मैं सी ++ के सभी इंस और आउट से बहुत परिचित नहीं हूं लेकिन मुझे यह बहुत दूर मिल गया है।

मेरा एक पिछला प्रश्न है। मैंने पूछा, जो इससे संबंधित है, लेकिन वही सवाल नहीं है। एक बार यह हल हो जाने के बाद मैं उत्तर को अपडेट करना चाहता हूं ताकि अन्य जान सकें कि क्या करना है।


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

0
Khailz 27 फरवरी 2020, 04:08

1 उत्तर

सबसे बढ़िया उत्तर

एन्यूमरेट को 1 के बजाय 0 पर सेट करके इस समस्या को ठीक किया गया। यह नोड्स को प्राकृतिक पैरेंट के बजाय एक द्वारा ऑफ़सेट करने का कारण बन रहा था।

1
Khailz 16 जुलाई 2020, 23:00