※ ChatGPTを利用し、要約された質問です(原文:木構造を描写すると重なる)
重なる木構造の表現方法について
vectorに入った要素をある順序で木構造で表現しようとしてます。
まず
bbについてですがi=0から増えていくごとに0,-1,1,-2,2というようになります。これにより一つ目の子ノードは親ノードのy座標と同じ位置で次はposY(親ノードのY座標)-1*y1*2となり次は反対側にという風に下上下上という風に描写していきます。それを再起呼び出しで繰り返すことで全ての文字を木構造表現しています。
木構造の表現は出来ているのですが問題があります。子ノード同士が同じ座標に描かれます。どういうことかというと同じ親ノードを持つ複数の子ノード(子2、子3とします)同士がさらに複数の子ノード(子4)を持つ時に、子4は子4の子3ノードと重なってしまいます。y座標の決定がbbによって同じ振幅になるからだと思います。
しかし打開策が思いつかないので考えられる方法を教えていただきませんか?
下のプログラム自体はそれほど必要でないと思いますので細かい説明は辞めておきます。
class drawpair{
int bb=0;//子ノードのy座標を決める値
int x1;
public drawpair(Graphics g,Vector x,int posX,int posY,Vector causal1){
for(int i=0;i<x.size();++i){
if(i==0){
//親ノードの描写.DrawWordで文字を描写します。
new DrawWord(g,(String)x.elementAt(i),posX,posY);
}else{
//y座標を決めるbbの値の設定。
bb +=(int) Math.pow(-1,i)*(i-1);
new DrawWord(g,(String)x.elementAt(i),getFontMetrics(f1).stringWidth((String)x.elementAt(0))+posX+50,posY+bb*2*y1);
PairNode tes = new PairNode();
x1=tes.nextNode((String)x.elementAt(i),causal1);
if(x1!=-1){
new drawpair(g,(Vector) causal.elementAt(x1),getFontMetrics(f1).stringWidth((String)x.elementAt(0))+posX+50,posY+bb*2*y1,causal);
}
}
samplevec.removeAllElements();
}
}
}
お礼
ありがとうございます。描写するサイズを決めるというのは思いつかなかったです。 その考え方を使わせていただき、解決しました。ありがとうございます。