Java中数据和文本的旋转坐标平面

Java中数据和文本的旋转坐标平面,java,swing,plot,graphics2d,affinetransform,Java,Swing,Plot,Graphics2d,Affinetransform,我需要: 1.移动原点并旋转坐标平面,以便x值从新原点向右移动,y值从新原点向上移动,新原点需要是下面代码中蓝色矩形的左下角。这将使我能够在下面的代码中绘制x、y坐标对上的点。 2.在数据打印的y轴上打印tic标记的旋转标签 下面的代码设置了此问题。除了两个问题外,它是有效的: 1.绘制数据点时,以左上角为原点,y值向下递减 2.y轴上tic标记的标签未在屏幕上绘制 有谁能告诉我如何修复下面的代码,使其修复这两个问题,并执行上面第一段所描述的操作 代码位于以下两个java文件中: DataGUI

我需要: 1.移动原点并旋转坐标平面,以便x值从新原点向右移动,y值从新原点向上移动,新原点需要是下面代码中蓝色矩形的左下角。这将使我能够在下面的代码中绘制x、y坐标对上的点。 2.在数据打印的y轴上打印tic标记的旋转标签

下面的代码设置了此问题。除了两个问题外,它是有效的: 1.绘制数据点时,以左上角为原点,y值向下递减 2.y轴上tic标记的标签未在屏幕上绘制

有谁能告诉我如何修复下面的代码,使其修复这两个问题,并执行上面第一段所描述的操作

代码位于以下两个java文件中:

DataGUI.java

import java.awt.*;
import java.util.ArrayList;
import javax.swing.*;

class DataGUI extends JFrame{
DataGUI() {
    super("X,Y Plot");
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setPreferredSize(new Dimension(800, 400));
    this.pack();
    this.setSize(new Dimension(800, 600));
    this.setLocationRelativeTo(null);


    setLayout(new GridLayout());
    ArrayList<Double> myDiffs = new ArrayList<Double>();
            myDiffs.add(25.0);
            myDiffs.add(9.0);
            myDiffs.add(7.0);
            myDiffs.add(16.0);
            myDiffs.add(15.0);
            myDiffs.add(6.0);
            myDiffs.add(2.0);
            myDiffs.add(8.0);
            myDiffs.add(2.0);
            myDiffs.add(27.0);
            myDiffs.add(14.0);
            myDiffs.add(12.0);
            myDiffs.add(19.0);
            myDiffs.add(10.0);
            myDiffs.add(11.0);
            myDiffs.add(8.0);
            myDiffs.add(19.0);
            myDiffs.add(2.0);
            myDiffs.add(16.0);
            myDiffs.add(5.0);
            myDiffs.add(18.0);
            myDiffs.add(23.0);
            myDiffs.add(9.0);
            myDiffs.add(4.0);
            myDiffs.add(8.0);
            myDiffs.add(9.0);
            myDiffs.add(3.0);
            myDiffs.add(3.0);
            myDiffs.add(9.0);
            myDiffs.add(13.0);
            myDiffs.add(17.0);
            myDiffs.add(7.0);
            myDiffs.add(0.0);
            myDiffs.add(2.0);
            myDiffs.add(3.0);
            myDiffs.add(33.0);
            myDiffs.add(23.0);
            myDiffs.add(26.0);
            myDiffs.add(12.0);
            myDiffs.add(12.0);
            myDiffs.add(19.0);
            myDiffs.add(14.0);
            myDiffs.add(9.0);
            myDiffs.add(26.0);
            myDiffs.add(24.0);
            myDiffs.add(13.0);
            myDiffs.add(19.0);
            myDiffs.add(2.0);
            myDiffs.add(7.0);
            myDiffs.add(28.0);
            myDiffs.add(15.0);
            myDiffs.add(2.0);
            myDiffs.add(5.0);
            myDiffs.add(17.0);
            myDiffs.add(2.0);
            myDiffs.add(16.0);
            myDiffs.add(19.0);
            myDiffs.add(2.0);
            myDiffs.add(31.0);
    DataPanel myPP = new DataPanel(myDiffs,this.getHeight(),this.getWidth());
    this.add(myPP);
    this.setVisible(true);// Display the panel.
}
public static void main(String[] args){
    DataGUI myDataGUI = new DataGUI();
    myDataGUI.setVisible(true);
}
}
java注意:我编辑了下面的代码以包含垃圾神的建议,但它仍然不起作用


此外,一如既往,我们非常感谢您提供有关该主题的文章或教程的链接。

对于不完整的回答,我们深表歉意,但这可能会让您的工作进展顺利。Java按照您描述的方式绘制东西:它认为屏幕的左上角是0,0,并向右绘制x,向下绘制y。如果你能说出

g2d.drawOval(priorInt, currentInt, 4, 4);
进入

它应该为您的第一期提供正确的结果。我需要更多关于第二个问题的信息来帮助你解决这个问题。他们是刚从屏幕上消失,还是被别的东西吸引住了?尝试翻转+s和-s,看看如果是这种情况,是否可以得到正确的结果。

中显示了一种方法。概括地说

保存图形上下文的变换

Graphics2D g2d = (Graphics2D) g;
AffineTransform at = g2d.getTransform();
将原点平移到中心

g2d.translate(w / 2, h / 2);
反转y轴

使用笛卡尔坐标进行渲染

恢复用于常规渲染的变换

g2d.setTransform(at);

与手头的问题无关,但添加到ArrayList的数据应该保存在数据文件中,而不是在程序中硬编码。@气垫船上满是鳗鱼,是的,我知道。事实上,数据是一些数组操作的结果,比上面的数据集长得多。但是,我按照上面的方式加载了它,这样就可以更容易地重现这个站点上的人。考虑列表MyDIFS=新的ArayListSalix.AsList25.0,9,7,……我在网上做了一些研究,我发现了关于仿射变换的教程,还有一些更复杂的教程。这材料对我来说很难掌握,因为我还没有学过线性代数。然而,如果有人能告诉我如何修复代码,我想我可以通过分解我收到的建议来学习。谢谢你的建议。我做了更改并尝试运行代码,但它在蓝色矩形外绘制了一个,这表明它没有正确地重新定位数据点。您可以自己看到,如果使用更改运行代码,蓝色矩形左边缘的左侧会有一个数据点,大约是屏幕上方70%的位置。这意味着每个点也被错误地绘制,即使它们位于蓝色框内。至于tic标记标签,它们的放置方式应与x轴标签类似+1用于尝试帮助。尝试使用g2d.drawOval优先级,-currentInt,4,4;我有点盲目,因为我没有运行我建议的代码。很抱歉,我懒得写一个JPanel wrapper=P。我能看到的y轴标签绘图代码的唯一错误是,您可能只是在红色框内绘图。尝试将g2d.setColor.red更改为g2d.setColor.green+1谢谢。我会仔细考虑你的建议。请理解,我一直在探索翻译,反演,仿射变换等需要一段时间了,他们总是让我困惑。当我为一个应用程序找到答案时,我发现几周后,当需要下一个应用程序时,我感到困惑。您愿意将您的建议合并到上面我的DataPanel.java文件中的工作代码中吗?如果您愿意这样做,我将能够使用java api仔细检查您的代码,并更好地了解其工作原理。所引用的示例是完整的,它说明了图形转换的一个基本功能—_ordercounts。您的范围标记将消失,因为它们已旋转出视图。更多。我看过你的代码和你引用的参考资料。我也做了你建议的修改,但现在它只是简单地不绘制所有的点,但其中一点。我已经在上面的原始帖子中显示了修改后的代码,包括您的建议,以便可以重新创建当前剩余的问题。你愿意告诉我如何修复我上面修改过的代码,使其与我原来发布的代码相同吗 我想做什么?非常感谢。
g2d.translate(w / 2, h / 2);
g2d.scale(1, -1);
g2d.setTransform(at);