gpt4 book ai didi

java - 如何在 Java 中绘制交互式图形/线条?

转载 作者:行者123 更新时间:2023-12-01 13:39:07 28 4
gpt4 key购买 nike

已解决。

我之前有一个问题,但它发布得非常糟糕,所以根据更好的规则,这里再次出现。

我想创建某种样式的图表,例如此图像:

enter image description here

它基于物理定律,Snell's Law 。到目前为止,我已经成功地使用基本的 Line2D.Double 自行绘制了图形,您可以看到 here (Line.java) 。然后我需要做的就是在接口(interface)类中,将行添加到该类中的数组中,如下所示:

LinesArray.addLine(150 , 25 , 150 , 275);

每次添加新的时,它都会重新绘制,如代码示例中所示。

但问题是我不知道如何使其具有交互性。我想让它具有交互性,因为你实际上可以移动这些线,同时你移动第一条线,第二条线也会根据斯涅尔定律公式移动,即:

n1 * sin( a1 ) = n2 * sin ( a2 )

Considering that a1 is the first (left) angle, and a2 the second (right) angle in the first image posted.

我希望实现的完美示例是 this one 。如果交互式移动太难(我的日程安排为 2 天),this example也是一种可能。

如果我错了,请纠正我,但对于第二个,我需要做的就是计算鼠标的坐标并从那里绘制和计算所有内容。

Here (menu_ui.java)是我的接口(interface)类,其中我当前使用的方法是“menuSnell()”和 here (Snell.java是我的 Snell 类,其中包含逻辑。对葡萄牙语注释表示歉意,但它是相当简单的代码,您实际上不需要注释来理解,而且我已将其分成可读的方法。

基本上,我的问题是如何使这些线条以我上面描述的方式交互。

谢谢!

最佳答案

我不是图形专家,但我很早以前也做过类似的工作。我有一个需要重新粉刷的物体。我创建了自己的 JPanel,其中包含应该绘制的对象。每当发生变化时,我都会在 JPanel 上调用 repaint 方法。看起来像这样 http://sourceforge.net/p/scribbler-cvut/code/132/tree/Tuzka/src/cz/cvut/scribbler/panel/RewritableGlassPane.java .

private LinkedList<ColoredArea> background = new LinkedList<ColoredArea>();
/**
* Vykreslí všechny položky v senamu vykreslených obrazců
* @param g2d grafika k vykreslení
*/
public void paintShape(Graphics2D g2d) {
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
for (ColoredArea area : background) {
area.fill(g2d);
}
if (mouse != null && !block) {
g2d.setColor(mouse_color);
g2d.draw(mouse);
}
if (point!=null){
SetPointsDialog.paintPoints(point, maxPoint, parent.getChildsSize(), g2d);
}
}

@Override
public void paint(Graphics g) {
paintShape((Graphics2D) g);
}

@Override
protected void paintComponent(Graphics g) {
paintShape((Graphics2D) g);
}

我需要绘制的所有内容都存储在背景变量中。当 LinkedList 发生更改时,我会在窗口上调用 repaint () 方法。

我这里有一个完整的源代码存储:http://sourceforge.net/projects/scribbler-cvut/但这是我的长期项目,所以有点大。

关于java - 如何在 Java 中绘制交互式图形/线条?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20981381/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com