当前位置: 首页 > 知识库问答 >
问题:

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

索正豪
2023-03-14

我正在研究一个依赖图,它由多个节点和图中从一个节点到另一个节点的多条有向边组成。

我试图通过添加n个节点作为圆和这些节点之间的边作为线来绘制图形的可视化。

我使用图形库的Java随着JGroup和Jframe。

这是我目前编写的代码:

public class LoopUnrolling extends JPanel{


static int length = 5;
static String graph[][] = new String[length][length];


@Override
public 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个答案

彭浩穰
2023-03-14

有两个带中心的椭圆

 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)

 类似资料:
  • 问题内容: 我正在使用networkx处理图。我有一个很大的图(其中有近200个节点),我尝试查找两个节点之间的所有可能路径。但是,据我了解,networkx只能找到最短的路径。如何不仅获得最短路径,还获得所有可能路径? UPD:路径只能包含每个节点一次。 UPD2:我需要类似find_all_paths()函数的功能,在此进行描述:python.org/doc/essays/graphs.htm

  • 我们希望您能够帮助我们解决以下问题: 给出了一个可能包含圈的有向图。必须找到一组满足以下标准的路径: 在从节点A到节点B的过程中可以通过的所有边必须被集合内的路径覆盖(一条边可以是集合中多条路径的一部分) 解决方案不必是路径数最少的解决方案,路径也不必是最短的。然而,该解决方案应该可以像java一样使用编程语言高效地实现。我们需要解决方案来生成几个测试用例,覆盖节点a和节点B之间的所有边很重要。

  • 我试图通过在MST中添加新顶点来更新MST。为此,我一直在关注Chin和Houck的“更新生成树”。http://www.computingscience.nl/docs/vakken/al/WerkC/UpdatingSpanningTrees.pdf 论文中的一个步骤要求我在两个给定顶点之间的路径中找到最大的边。我的想法是找到顶点之间所有可能的路径,然后从这些路径中找到最大的边。我一直在尝试在

  • 问题内容: 我正在使用JMap Viwer在Java中使用OpenStreet Maps http://wiki.openstreetmap.org/wiki/JMapViewer我可以加载地图,一切正常,但是我不知道如何从纬度在两点之间绘制一条线和经度。 任何人都知道画这种线的功能吗? 谢谢。 问题答案: 该方法对于这个作品,但默默拒绝有少于三个顶点的多边形。对于两点之间的直线,只需重复最后一个

  • 我正在为一个CS类做一些家庭作业,并且正在努力使用一个函数来反转两个给定节点之间的双链接列表。我对自己做错了什么感到困惑,我在谷歌上搜索过,但找不到任何有帮助的东西。 我有一个双链表,我基本上使用这个函数作为辅助函数,在两个节点之间反转它,这两个节点作为函数的参数。 下面是模板的代码,有注释以便您了解我的思考过程 那么,有什么想法吗?我已经知道问题发生在哪里,是什么,但是我还不知道为什么会发生,以

  • arcTo()介绍 arcTo()方法接收5个参数,分别是两个切点的坐标和圆弧半径。这个方法是依据切线画弧线,即由两个切线确定一条弧线。 具体如下。 arcTo(x1,y1,x2,y2,radius) 这个函数以给定的半径绘制一条弧线,圆弧的起点与当前路径的位置到(x1, y1)点的直线相切,圆弧的终点与(x1, y1)点到(x2, y2)的直线相切。因此其通常配合moveTo()或lineTo(