【问题标题】:Why are Polygons misshaped when using Vector coordinates in a Java Applet?在 Java Applet 中使用矢量坐标时,为什么多边形会变形?
【发布时间】:2014-02-01 23:34:33
【问题描述】:

我在纸上绘制了 8 个不同多点形状的 X、Y 坐标的完整蓝图。我将这些坐标放入一个数组中,例如..

Polygon shape1;    
int[] shapeOneX = {1,2,3,4,5,6,7,8,9};
int[] shapeOneY = {1,2,3,4,5,6,7,8,9};
shape1 = new Polygon {shapeOneX, shapeOneY, shapeOneX.length};

这些坐标是假的,不是我的真实坐标,但在纸上,这些坐标完全符合您期望矢量图的外观的规则。当我将它加载到 Java Applet 中时,形状不遵循这些确切的坐标。它们有时很接近,但并不精确,我的项目需要精确。

有谁知道为什么,或者是否需要在坐标上使用不同的公式以使其在 Java 小程序中看起来相同?如果需要更多信息,请告诉我。

我知道 java 小程序的起始坐标从左上角 0,0 开始,然后从那里扩展。我想我的问题是,我理解“矢量”线从 0,0 作为中点开始。我对绘图知之甚少。所以...我的形状是从矢量样式创建的,但是被“放置”到一个左上角为 0,0 的小程序中。这很好,我有工具可以将它们调整到我需要放置的位置。我只是无法让他们创建我实际在纸上绘制的形状。我是否需要从左上角的 0,0 原点在纸上绘制图形并且只创建正 X、Y 变量?

另一个编辑——我注意到当它绘制到小程序上时,它也几乎是镜像的。换句话说,(x) 向右,(-x) 向左。这很正常。但是 (y) 下降,并且 (-y) 上升..这似乎不正常 HMM.. 困惑。

最终编辑(可能)——关于 Y 轴被镜像,我是对的。为什么?我不知道。但它允许我重新设计一些坐标。我目前的印象是线条边界非常粗,以至于连接了每个顶点,以至于它们将形状重新变成了一团垃圾。因为重叠的边界。很难看出每个顶点的实际位置。我还必须增加我的 (x,y) 坐标值以补偿尺寸差异。我可能有将近 100 种不同的 (x,y) 组合,因此我需要重新做......我真的希望有一个更简单的答案。我对任何和所有建议持开放态度,同时我将全力以赴重新映射。感谢所有已经或继续做出贡献的人。

例如..首先是原始坐标:

       int[] wallX = { -2,-2,-1,-1, 2, 2 };
       int[] wallY = { -1, 3, 3, 0, 0,-1 };

然后我发现工作的新工作坐标是:

    int[] wallOneX = { -2,-2, 1, 1, 10, 10 };
    int[] wallOneY = {  4,-8,-8, 1, 1,  4  };

这就是从纸上创建相同形状所需的数字差异,进入 java 小程序。我真的没有看到任何模式或任何东西可以为我的所有其他人重新创建它。所以我不知道。

【问题讨论】:

    标签: java vector applet vector-graphics polygons


    【解决方案1】:

    您需要根据您正在绘制多边形的 jpanel 或画布对象的高度和宽度来缩放坐标。使用 getHeight() 和 getWidth() 获取尺寸。此外,原点位于 jpanel 或画布的右上角,因此您需要使用加法/减法来移动缩放坐标,或者您需要使用仿射变换来获取您想要的多边形。

    有时从工作示例开始会有所帮助。你可以试试this approachthis approach。这是第三种方法already in an applet

    【讨论】:

    • 我知道java小程序的起始坐标从左上角0,0开始,然后从那里扩展。我想我的问题是,我理解“矢量”线从 0,0 作为中点开始。我对绘图知之甚少。所以......我的形状是从矢量样式创建的,但是被“放置”到一个左上角为 0,0 的小程序中。这很好,我有工具可以将它们调整到我需要放置的位置。我只是无法让他们创建我实际在纸上绘制的形状。我是否需要从左上角的 0,0 原点在纸上绘制图形并且只创建正 X、Y 变量?
    • @Corey 也许您应该从一些工作示例开始。我刚刚在上面的答案中添加了三个工作示例的链接。这有帮助吗? +1 通过编辑您的问题来坚持论坛。
    • 更重要的是感谢您抽出宝贵的时间来帮助我!哈哈。我正在查看这些网站,我认为目前可能对我有帮助。是不是我能找出我的多边形的哪些点具有什么价值。我的意思是,是的,我正在向它们传递值,但是它们的显示方式非常奇怪。我觉得我可能应该花更多的时间来了解它的实际作用。我猜在我的脑海里,当我告诉某事去时 (x-2 y3)(x-1 y3)(x-1 y0)(x2 y0)(x2 y-1)(x-2 y-1) 6 分,这应该创建一个 4 向下,4 跨 L 形状。 =\ 但它没有...
    • 1/2 K 代表快乐! :)
    • @CodeMed 是的,你一开始是对的。我的错误是在我知道我正在使用的比例之前开始我的坐标,但是镜像坐标和其他一切都让我非常糟糕。结合我弄清楚这一点,基本上将 1:3 的比例应用于我的旧坐标并反转 Y 轴。会给我我需要的东西。谢谢您的帮助。我会+1,但我没有代表。初次使用者。会回来感谢你。
    猜你喜欢
    • 2015-04-10
    • 1970-01-01
    • 2012-07-05
    • 2016-10-09
    • 2017-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    相关资源
    最近更新 更多