经过几个小时的尝试后,我决定来找你们帮忙。
我正在尝试用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);
}
如果您有任何想法,请告诉我。
谢谢 ++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++
这是现状
它应该是这样的
答案 0 :(得分:3)
尝试将y坐标计算为
NewValue = NewMax - (((OldValue - OldMin) * (NewMax - NewMin)) / (OldMax - OldMin)).