java - 在Java中绘制自动机的有向边

标签 java graphics curve automata

我需要写类似graphviz的内容。我已经设法绘制节点,使它们不重叠,并将它们的中心与二次贝塞尔曲线连接起来,但我面临着以下弯曲边缘方向性的问题:

enter image description here

正如你所看到的,黄色的小三角形不太好看。我的代码如下:

    g.setColor(Color.RED);
    ArrowGraph arrow = graph.getArrows().get(0);    
    int x = (int)(arrow.getP1().getX() + arrow.getP2().getX()) / 2;
    int y = (int)(arrow.getP1().getY() + arrow.getP2().getY()) / 2 + 50;
    QuadCurve2D.Double curve = new QuadCurve2D.Double(arrow.getP1().getX() - 20, arrow.getP1().getY() - 20, x, y, arrow.getP2().getX() - 20, arrow.getP2().getY() - 20);         
    ((Graphics2D)g).draw(curve);            

    int[] xPoints = new int[] {(int)arrow.getP2().getX() - 20, (int)arrow.getP2().getX() - 15, (int)arrow.getP2().getX() - 25};
    int[] yPoints = new int[] {(int)arrow.getP2().getY() - 20, (int)arrow.getP2().getY() - 10, (int)arrow.getP2().getY() - 10};
    g.setColor(Color.YELLOW);
    g.fillPolygon(xPoints, yPoints, 3);

我所知道的坐标:曲线的起点、终点和控制点。起点和终点基本上是节点的中心。

我想以某种方式将三角形调整为曲线,因此它位于其末端(最好在节点的边界处)。知道我该怎么做吗?

最佳答案

您可以使用 FlatteningPathIterator 传递曲线并获取最后一段(实际上是路径上的最后一行)。

使用线来构建箭头三角形。

关于java - 在Java中绘制自动机的有向边,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27984106/

相关文章:

c++ - 如何访问位图中的像素颜色?

drawing - 对一系列线段进行曲线拟合

java - 用于在 Java 中构建 SOAP Web 服务客户端的推荐库

java - 如何在Java中让递归和for循环一起工作?

java - 使用 Java 处理绘制数据图形

opengl - 文本和矢量艺术的快速光栅化

java - 检查曲线是否闭合

algorithm - Matlab - Frechet算法

java - Android PlaceAutocompleteFragment自动关闭

java - 设置可编辑文本区域的格式