我正在研究一個依賴圖,它由圖中的多個節點和從一個節點到另一個節點的多個有向邊組成。我試圖通過在這些節點之間添加 n 個節點作為圓圈和邊緣作為一條線來繪制圖形的可視化。我將 Java 的圖形庫與 JPanel 和 Jframe 一起使用。這是目前我所做的代碼:public class LoopUnrolling extends JPanel{static int length = 5;static String graph[][] = new String[length][length];@Overridepublic void paintComponent(Graphics g){ super.paintComponent(g); Random random = new Random(); int x1 = random.nextInt(500); int y1 = random.nextInt(100); int x2 = random.nextInt(500); int y2 = random.nextInt(100); g.setColor(Color.red); g.drawOval(x1,y1,30,40); g.drawOval(x2,y2,30,40); g.drawLine(x1, y1, x2, y2);}public static void main(String[] args) { LoopUnrolling paintObject = new LoopUnrolling(); JFrame jf = new JFrame(); jf.setTitle("Dependancy Graph"); jf.setSize(600,400); jf.setVisible(true); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.add(paintObject); } }我能夠畫兩個圓圈和一條線,但 我遇到的問題是用邊連接這兩個圓圈。我在畫布上的隨機位置繪制了每個節點,并想在這兩個節點之間添加一條線。該線具有 Point1(x1,y1) 和 Point2(x2,y2)。這些點應該是兩個不同節點(圓)輪廓上的點
1 回答

尚方寶劍之說
TA貢獻1788條經驗 獲得超4個贊
你有兩個帶中心的橢圓
cx1 = x1 + w1/2, cy1 = y1 + h1/2
and
cx2 = x2 + w2/2, cy2 = y2 + h2/2
其中 wxx 和 hxx 是橢圓的寬度和高度( 的第三個和第四個參數drawOval)
獲取差異向量
dx = cx2 - cx1
dy = cy2 - cy1
規范化
len = sqrt(dx*dx + dy*dy)
dx = dx / len
dy = dy / len
現在計算圓周上的點
r1 = 0.5 * w1 * h1 / sqrt(w1*w1*dy*dy+h1*h1*dx*dx)
px1 = cx1 + r1 * dx
py1 = cy1 + r1 * dy
r2 = 0.5 * w2 * h2 / sqrt(w2*w2*dy*dy+h2*h2*dx*dx)
px2 = cx2 - r2 * dx
py2 = cy2 - r2 * dy
并繪制線段(px1,py1)-(px2,py2)
示例Delphi 實現和結果:
添加回答
舉報
0/150
提交
取消