【问题标题】:Storing Points On an Ellipse: Java在椭圆上存储点:Java
【发布时间】:2014-02-12 00:42:01
【问题描述】:

现在我有一个使用图形(drawLine、drawArc 等)绘制的篮球场,并且有一个 mouseClicked 事件,该事件将根据布尔 shotMade 是否为真(设置使用底部框架的“Make”和“Miss”按钮)。现在,我实际上将在 getX()-6 和 getY()+6 处生成“X”或“O”,这样“X”或“O”的 center 将是在鼠标点击的地方绘制(使用 g.drawString() 将从左下角开始绘制 'X' 或 'O',因此它不会直接居中)。

我的问题在于我对两分球和三分球的区别。现在,在 x 值 52 和 448 处的三分线上在球场的角落有垂直直线,所以我知道任何 x 小于 52 或大于 448 的点击点也将是三分作为y值大于250的任何点,表示键的顶部,或沿弧线任意点的最高y值。为了确定弧上任意位置的三个或两个,我有一个想法,将用于绘制弧的每个 x 和 y 像素存储到两个 ArrayList 中(一个用于 x,一个用于 y),当鼠标位于单击某个点,它将在其列表中搜索 x 值,并检查 y 点是否大于其列表中相应点的 y 点。我用 g.drawArc(52,-110,396,360,0,-180) 画了圆弧,将圆心放在点 (250, 70)。

因此,使用所有这些信息,我首先想知道如何使用某些公式将每个像素值存储到 ArrayList 中以计算椭圆周围的每个点,然后如何检查是否单击了点确实是三两。

感谢任何帮助,包括任何更有效的想法或其他想法。谢谢!

【问题讨论】:

    标签: java graphics arraylist ellipse


    【解决方案1】:

    看看 java.awt.geom.Area

    请注意,在“区域”类中... http://docs.oracle.com/javase/7/docs/api/java/awt/geom/Area.html

    .... 有一个方法 contains(double x, double y),它返回布尔值。方法“测试指定的坐标是否在形状的边界内...”

    也许您可以使用它来确定用户是否在定义 2 点区域的椭圆形内单击。

    还要注意,Area 类可以接受一个 Shape 来定义它。

    【讨论】:

    • 这对我来说实际上是一个新概念,但在这种情况下,Area 类确实对我有用得多。现在,当我在其构造函数中传递一个形状对象时,我将如何使它使用我绘制的弧线?
    • 实际上,尝试查看接口Shape的所有实现类:docs.oracle.com/javase/7/docs/api/java/awt/Shape.html ....如果你可以将你的弧表示为其中之一,那么你也有 contains 方法。 Arc2D 可能有用,但我认为您需要在所有侧面定义整个形状,因此请查看使用多边形,并将您的弧点与球场末端的点连接以形成形状。跨度>
    • 看起来 Arc2D 确实可以为它工作,我现在知道如何将它与 Area 类一起使用。非常感谢!
    • 没问题!如果您觉得有帮助,请接受我的回答。 :)
    • 对不起,只是另一个问题,或者我只是没有使用正确的方法。我正在尝试使用我拥有的信息创建 Arc2D,这似乎是最简单的 public void setArcByCenter(double x, double y, double radius, double angSt, double angExt, int closure)。但是因为椭圆的长度是 396,高度是 360,所以它没有一个恒定的半径。其他 setArc 方法似乎也没有我可以使用的参数。
    猜你喜欢
    • 1970-01-01
    • 2014-12-03
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多