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

在矩形内绘制基于平铺的椭圆

伍弘盛
2023-03-14

我正在尝试生成随机大小的椭圆,并将其绘制到地图上(只是一个二维瓷砖阵列)。在大多数情况下,这是可行的,然而,当房间比它更宽时,它似乎会切断墙角。

下面是我绘制椭圆的代码。基本上是取一个矩形并在其中绘制椭圆。

private void AddCellEllipse(int xStart, int yStart, int xEnd, int yEnd, Tile tile)
{
    // Draw an ellipse centered in the passed-in coordinates
    float xCenter = (xEnd + xStart) / 2.0f;
    float yCenter = (yEnd + yStart) / 2.0f;
    float xAxis = (xEnd - xStart) / 2.0f;
    float yAxis = (yEnd - yStart) / 2.0f;

    for (int y = yStart; y <= yEnd; y++)
        for (int x = xStart; x <= xEnd; x++)
        {
            // Only draw if (x,y) is within the ellipse
            if (Math.sqrt(Math.pow((x - xCenter) / xAxis, 2.0) + Math.pow((y - yCenter) / yAxis, 2.0)) <= 1.0f)
                tiles[x][y] = tile;
        }
}

我这样称呼这种方法。在随机位置生成随机大小的矩形,然后创建墙砖的椭圆,然后用地砖覆盖内侧墙砖。

    AddCellEllipse(xRoomStart, yRoomStart, xRoomStart + roomWidth, yRoomStart + roomHeight, Tile.WALL);
    AddCellEllipse(xRoomStart + 1, yRoomStart + 1, xRoomStart + roomWidth - 1, yRoomStart + roomHeight - 1, Tile.FLOOR);

还有一个额外的问题,有人知道我怎么才能不把1块瓷砖放在椭圆的顶部/底部吗?

共有1个答案

云瑞
2023-03-14

可以使用Bresenham椭圆算法或中点算法绘制椭圆。

当您使用上述算法绘制两个对称点(图块)时,如下所示:

DrawPixel (xc + x, yc + y);
DrawPixel (xc - x, yc + y);

只需用内部瓷砖填充它们之间的线段。

 类似资料:
  • 主要内容:示例可以使用类的方法在图像上绘制椭圆形。 以下是这种方法的语法 - 该方法接受以下参数 - mat - 表示要在其上绘制矩形的图像的对象。 pt1 和 pt2 - 两个对象,表示要绘制的矩形的顶点。 color - 表示矩形颜色的标量对象(BGR)。 thickness - 表示矩形厚度的整数; 默认情况下,厚度值为。 类的构造函数接受类的对象,Size类的对象和double类型的变量,如下所示。 示

  • 我目前正在为特别大的图像文件(有时在千兆像素)设计和开发定制的图像查看器。幸运的是,这些在分阶段分辨率层中以256x256瓦片的形式提供,然后在需要时传递给OpenGL。 瓷砖本身通过一个四叉树进行管理,这似乎是“几乎两幅图像的幂”的一个强有力的解决方案。然而,如果图像的宽高比非常大(例如,1千兆像素x 50000),模型就会因大量的空分片而变得不稳定。一次只能展示有限数量的瓷砖。 我正在使用Ja

  • 使用closePath()闭合图形 首先我们用上节课的方法绘制一个矩形。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UT

  • 主要内容:圆角矩形,椭圆示例JavaFX Shape类定义了常见的形状,例如线,矩形,圆,Arc,CubicCurve,Ellipse和QuadCurve。 在场景图上绘制矩形需要宽度,高度和左上角的(,)位置。 要在JavaFX中绘制一个矩形,可以使用类。 上面的代码生成以下结果。 圆角矩形 类实现了弧宽和弧高。可以使用这些功能来绘制圆角矩形。 上面的代码生成以下结果。 椭圆示例 上面的代码生成以下结果。

  • 绘制矩形        点击菜单栏中的“绘制矩形”按钮可以绘制矩形,绘制矩形在数据下载的时候经常要用到,绘制矩形操作及信息与绘制面相同。 修改矩形        添加后可以使用“选中对象”后双击更改面的样式,也可右键“属性”修改线的属性信息。点击属性信息框下方的整体移动(单点修改)键对面进行位置的更改。在“空间信息”栏修改矩形的节点坐标后,需要注意的是修改完可能就不是标准矩形了,要调整。 删除矩形

  • 绘制矩形        点击菜单栏中的“绘制矩形”按钮可以绘制矩形,绘制矩形在数据下载的时候经常要用到,绘制矩形操作及信息与绘制面相同。 修改矩形        添加后可以使用“选中对象”后双击更改面的样式,也可右键“属性”修改线的属性信息。点击属性信息框下方的整体移动(单点修改)键对面进行位置的更改。在“空间信息”栏修改矩形的节点坐标后,需要注意的是修改完可能就不是标准矩形了,要调整。 删除矩形