如何正确地重新排列arraylist以便能够从中进行绘制

时间:2015-05-19 12:41:58

标签: java arrays arraylist

经过几个小时的尝试后,我决定来找你们帮忙。

我正在尝试用Java可视化HPGL文件。

HPGL文件的内容如下所示:

IN;SP1;PU9360,33;PD9355,31,9352,28,9351,24,9195,43,9042,67,8890,95,8740,128,8592,166,8446,208;PU0,0;SP0;IN;

这只是一个片段。整个文件包含大约30000个字符。我通过扫描仪将x和y坐标提取到一个arraylist。我无法使用int数组,因为我无法知道它的大小。

所以现在我有一个带X坐标的arraylist和另一个带Y坐标的ArrayList。

之后我调整了坐标的范围,以便最终的“图片”可以放在JPanel上。

我在Stack Overflow上使用了这个奇妙的公式,用于范围调整:

NewValue = (((OldValue - OldMin) * (NewMax - NewMin)) / (OldMax - OldMin)) + NewMin

现在,ArrayLists中提取的所有HPGL坐标都被修改为JPanel上的“可绘制”。

然后我使用arraylists绘制连接“points”的线条并使hpgl文件可视化。

while(condition == true){
g.drawLine(Code.sx.get(i), Code.sy.get(i), Code.sx.get(i+1), Code.sy.get(i+1));
i++;
}

几乎一切都按照我的预期工作,除了我面临的一个问题:问题是可视化结果是垂直翻转和镜像的。在第一张图片中,您可以看到当前状态,在第二张图片中,我可以看到它(垂直镜像),向您展示我希望得到的结果。

有人可以帮我重新排列arraylists以获得预期的结果吗?

arraylists看起来像这样:

ArrayList sx

[196, 189, 183, 176, 176, 170, 163, ...]

ArrayList sy

[473, 478, 483, 487, 487, 491, 494, ...]

两个ArrayLists都是一行,其中包含大约2000个整数。

我试过反转ArrayList但是没有帮助

for(int i = 0; i < sx.size() / 2; i++)
    {
        int temp = sx.get(i);
        sx.set(i, (sx.get(sx.size() - i - 1)));
        sx.set((sx.size() - i - 1), temp);
    }

如果您有任何想法,请告诉我。

谢谢 ++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++

这是现状 This is the Current State

它应该是这样的 This is how it should look like

1 个答案:

答案 0 :(得分:3)

尝试将y坐标计算为

NewValue = NewMax - (((OldValue - OldMin) * (NewMax - NewMin)) / (OldMax - OldMin)).