Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 选择围绕中心点的六边形中的像素_C#_Pixel_Hexagonal Tiles - Fatal编程技术网

C# 选择围绕中心点的六边形中的像素

C# 选择围绕中心点的六边形中的像素,c#,pixel,hexagonal-tiles,C#,Pixel,Hexagonal Tiles,我想在我的代码中实现一个简单的函数,以获得一个像素坐标列表,这些像素坐标是围绕中心点(x、y或线性RGBA字节数组,但我可以稍后转换)的一个(假设的)六边形大小 也许有一个简单的解决办法我没有想到。你能想出一个简洁的方法来实现这一点吗?你真正需要的是六边形的一个象限中的像素列表。然后,您可以简单地“反射”x和y坐标,以获得完整的六边形(当然取决于屏幕边界) 首先,我要断言,我希望我的一个六边形边水平对齐。我还假设“六边形的大小”是指从六边形中心到底部(水平对齐)的垂直线的长度(我们称之为L)。然

我想在我的代码中实现一个简单的函数,以获得一个像素坐标列表,这些像素坐标是围绕中心点(x、y或线性RGBA字节数组,但我可以稍后转换)的一个(假设的)六边形大小


也许有一个简单的解决办法我没有想到。你能想出一个简洁的方法来实现这一点吗?

你真正需要的是六边形的一个象限中的像素列表。然后,您可以简单地“反射”x和y坐标,以获得完整的六边形(当然取决于屏幕边界)

首先,我要断言,我希望我的一个六边形边水平对齐。我还假设“六边形的大小”是指从六边形中心到底部(水平对齐)的垂直线的长度(我们称之为L)。然后,假设原点(0,0)是我的中心点,我会在这个尺寸为L的六边形上做代数和三角运算

我知道,那么边界内的所有点都肯定在我的六边形内。所以把所有这些点都加到我的清单上

List<Point> pointsInHexagonQuadrant = new List<Point>();
for (int i = 0; i < L/Math.Sqrt(3); i++)  //I'm ignoring any casting, you may have to fix.
{
    for (int j = 0; j <= L; j++)
    {
         pointsInHexagonQuadrant.Add(new Point(i,j));
    }
}
添加这一点,即六边形的一个象限,如下所示:

(0,0)          (2L/sqrt(3),0)
   ---------------
   |            /
   |           /
   |          /
   |         /
   |        /
   |-------/
(0,L)      (L/sqrt(3),L) 
要得到完整的六边形,您需要在x轴和y轴上“反射”

List<Point> pointsInMyHexagon = new List<Point>();
foreach (Point p in pointsInHexagonQuadrant)
{
    pointsInMyHexagon.Add(new Point(p.X,p.Y));
    pointsInMyHexagon.Add(new Point(-p.X,p.Y));
    pointsInMyHexagon.Add(new Point(p.X,-p.Y));
    pointsInMyHexagon.Add(new Point(-p.X,-p.Y));
}

它可能很粗糙,但概念应该可行。

您现在的解决方案有什么问题吗?我还没有解决方案。我只是以一种圆形的方式抓取像素,但我想要一个六边形。
List<Point> pointsInMyHexagon = new List<Point>();
foreach (Point p in pointsInHexagonQuadrant)
{
    pointsInMyHexagon.Add(new Point(p.X,p.Y));
    pointsInMyHexagon.Add(new Point(-p.X,p.Y));
    pointsInMyHexagon.Add(new Point(p.X,-p.Y));
    pointsInMyHexagon.Add(new Point(-p.X,-p.Y));
}
foreach (Point p in pointsInMyHexagon)
{
    p.Offset(myCenterPoint.X, myCenterPoint.Y);
}