当前位置: 首页 > 知识库问答 >
问题:

在JAVA中用线条绘制形状

越雨泽
2023-03-14

所以我在只用线绘制形状时遇到了一个大问题。假设我从屏幕中间的一个点开始画一条线,然后以100个像素的距离向前画,角度为0,然后我用角度72度画另一条相同长度的线,以此类推,直到html" target="_blank">360度。它应该给我一个完美的五边形,一条线结束,另一条线从那个点开始,但是线在末端不相交,它非常适合角度为0/90/180/270的正方形,但我需要让它适用于每个形状,甚至是圆。我用这个东西来计算:

_endingPointX = (_currentPostisionX + distance * _cosinuses[_angle]);

_endingPointY = (_currentPostisionY + distance * _sinuses[_angle]);

其中_cosinuses和_sinuses是双精度数组,包含360度中每一个的窦和余弦值。当画线时,我需要将这些值转换为整数。

drawLine(_ currentpossionx,_ currentPostisionY,(int) _endingPointX,(int)_ ending pointy);

我不知道如何解决这个问题,并使线条在绘制形状的末尾相遇。几天来一直试图弄清楚这一点,但我没有想到任何事情。

问题解决了,谢谢各位的建议,使用整数造型是我的错误。

共有3个答案

阎俊英
2023-03-14

如果您只依赖int值,您将遇到准确性问题,因为sin(72°)是不合理的,而sin(90°)不是当然。

但是,您可以同时以双精度浮点精度绘制Line2D,或者使用GeneralPath[使用浮点数]。

谢裕
2023-03-14

由于sin和cos函数的精度导致舍入错误,它不能完美对齐。要解决这个问题,您可以将起点存储为单独的变量,并将其用作最后一行的终点。

宋志学
2023-03-14

在绘图之前立即以双精度和舍入方式计算所有值。
不要使用四舍五入的进一步计算。

要绘制五边形或 n- 正角形,请使用类似于以下内容的内容:

     // number of corners of pentagon
    double numVertex = 5;
    // how much to change the angle for the next corner( of the turtle )
    double angleStep = 360.0 / numVertex;
    gc.moveTo(cx, cy - rad);
    for (int i= 1; i < numVertex; i++) {
         // total angle from 0 degrees
         double angle = i* angleStep;
         // px point of turtle is corner of pentagon
         double px = cx + rad * sin(angle * DEG_TO_RADIANS);
         // move turtle to
         gc.lineto((int)Math.round(px),
         (int)Math.round(py));
    }
     gc.lineTo(cx, cy - rad);

如果您使用lineTo而不是线,则点满足的几率更高。

 类似资料:
  • 问题内容: 我试图在bufferedimage上绘制水平和垂直线。它最终应该看起来像一个网格单元。但是,当我运行代码时,我只看到两行:最左边的行和最上面的行(即,从0,0到0,图像的高度和从0,0到图像的宽度,0的一行),这里是代码段: 和覆盖的绘制方法: 所有这些都在扩展了JPanel的名为RobotMaze的类中。任何帮助表示赞赏。 问题答案:

  • 我正在尝试使用swing制作一个rpg(是的,这是愚蠢的,我同意,但我这样做是为了学习,而不是实际的工作产品)。目前我正在研究每个角色的统计。 我有一个JPanel,我想画一条线。 左侧是一个JPanel,它有两个组件:表1和JLabel。右侧也是JPanel,它有自己的元素,但那是另一回事了。 我的问题是,我想创建一个只有一个图像的jpanel,该图像将是两行,与表中选定的元素相关。 但不幸的是

  • 主要内容:示例可以使用类的方法在图像上绘制一条线。以下是此方法的语法。 该方法接受以下参数 - mat - 表示要在其上绘制线条的图像的Mat对象。 pt1和pt2 - 表示要绘制线条的点的两个点对象。 scalar - 表示圆的颜色的标量对象(BGR)。 thickness - 表示线条粗细的整数; 默认情况下,厚度值为。 示例 以下程序演示如何在图像上绘制线条并使用JavaFX窗口显示。 在执行上述程序时,

  • 我有以下代码应该在图像中绘制线条。我的代码是: 如果我编写,它实际上可以工作。但是我的数组很长并且来自一个输入。

  • 我正在尝试创建一个DFS生成的迷宫。我首先制作了一个有4行(顶部、右侧、底部和左侧)的对象。然后我将这些线绘制到Maze上。我的问题是大多数单元格看起来都很好,但是的左侧和顶部都有粗线,我不知道如何使它成为一个常规网格。 这是我的单元格,我在这里创建行: 是单元格的宽度,是高度。 这是我的,我在其中画线: 我很感激能得到的任何帮助。 运行时,我的网格如下所示:

  • 问题内容: 因此,我正在创建一个免费的手绘图JPanel,它会响应鼠标的移动并 绘制线条。我得到了它的大部分工作,除了一个错误,它会 在线之间随机画一条直线。该随机直线不是 故意的,在缓冲图像上绘制的内容严格来说应该是 用户绘制的内容。这些随机绘制的线不是由用户完成的, 这令人困惑。以下是我的代码,任何人都可以看看吗?所包含的图像 使您可以直观地看到正在执行的操作。 问题答案: 您可能希望嵌套列表