为了账号安全,请及时绑定邮箱和手机立即绑定

在两个节点(圆)之间绘制边(线)

在两个节点(圆)之间绘制边(线)

HUH函数 2022-12-21 11:59:28
我正在研究一个依赖图,它由图中的多个节点和从一个节点到另一个节点的多个有向边组成。我试图通过在这些节点之间添加 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 实现和结果:

//img1.sycdn.imooc.com//63a285030001492304190352.jpg

查看完整回答
反对 回复 2022-12-21
  • 1 回答
  • 0 关注
  • 91 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号