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