Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.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
使用DrawPolygon在C#中创建单个六边形_C#_Visual Studio - Fatal编程技术网

使用DrawPolygon在C#中创建单个六边形

使用DrawPolygon在C#中创建单个六边形,c#,visual-studio,C#,Visual Studio,好的,我已经创建了一个三角形,但我无法计算出坐标来创建一个简单的六边形 Point[] shape = new Point[3]; shape[0] = new Point(200, 100); shape[1] = new Point(300, 200); shape[2] = new Point(100, 200); 这形成了一个三角形,但我无法计算出六边形的x和y值,听起来像个简单的问

好的,我已经创建了一个三角形,但我无法计算出坐标来创建一个简单的六边形

Point[] shape = new Point[3];        
            shape[0] = new Point(200, 100);        
            shape[1] = new Point(300, 200);
            shape[2] = new Point(100, 200);
这形成了一个三角形,但我无法计算出六边形的x和y值,听起来像个简单的问题,但我的大脑今天工作不正常,下面是六边形的数组,我无法计算出值

Point[] shape = new Point[6];        
                shape[0] = new Point(0, 0);         
                shape[1] = new Point(0, 0);
                shape[2] = new Point(0, 0);     
                shape[3] = new Point(0, 0);
                shape[4] = new Point(0, 0);
                shape[5] = new Point(0, 0);

任何帮助都很好,谢谢

既然我已经写了一篇评论,我想我应该在一些真实的代码中演示一下

我创建了一个WinForms应用程序,其中有一个
面板
对象,我可以在上面绘制。然后我覆盖了
Paint
事件来绘制一个六边形

    private void panel1_Paint(object sender, PaintEventArgs e)
    {
        var graphics = e.Graphics;

        //Get the middle of the panel
        var x_0 = panel1.Width / 2;
        var y_0 = panel1.Height / 2;

        var shape = new PointF[6];

        var r = 70; //70 px radius 

        //Create 6 points
        for(int a=0; a < 6; a++)
        {
            shape[a] = new PointF(
                x_0 + r * (float)Math.Cos(a * 60 * Math.PI / 180f), 
                y_0 + r * (float)Math.Sin(a * 60 * Math.PI / 180f));
        }

        graphics.DrawPolygon(Pens.Red, shape);            
    }
private void panel 1_Paint(对象发送器,PaintEventArgs e)
{
var图形=e.图形;
//到中间去
var x_0=面板1.宽度/2;
变量y_0=面板1.高度/2;
var shape=新点F[6];
var r=70;//70 px半径
//创造6分
对于(int a=0;a<6;a++)
{
形状[a]=新点F(
x_0+r*(浮点)数学Cos(a*60*Math.PI/180f),
y_0+r*(float)Math.Sin(a*60*Math.PI/180f);
}
图形.绘图多边形(钢笔.红色,形状);
}
这就吸引了

正如我所说,关键是将六边形视为一个“离散”圆。这些点都被计算为在一个完美圆的外部,然后用一条直线连接。您可以使用此技术创建所有规则的
n点
形状(五角大楼,例如作为
5规则
shape;)

因此,您只需“刻”圆中的6个点即可得到六边形,如图所示,具有规则的5点形状:

然后记住,您可以计算给定极坐标的点的
(x,y)
坐标
(r,phi)
,如下所示:


您还可以向其中添加偏移量,在我的例子中,偏移量是我正在绘制的帧的中心。

提示:您也可以通过将六边形假装为一个有6个点的(离散)圆来创建六边形。您可以在循环中使用坐标变换
(x,y)=(r*cos(a),r*sin(a)
,保持
r
常数和
a
0
迭代到
360
,步骤为
60°
(即,计算圆上的6个点并将它们连接起来,从而得到一个六边形).嘿,回答得很好,你能帮我旋转一下吗?当得到质心时,它返回0,0@soulshined您需要通过偏移量将相位/角度偏移
alpha\u 0
。在上述代码中,将
a
替换为
30+a
左右(在
sin()
cos()
调用中)看看会发生什么。这会将第一个(和后面的)点的角度移动一个初始角度,给你这个旋转。先生,你太棒了-11°是一个神奇的数字。我仍然不明白为什么质心是
{0,0}
但我想这是另一个问题。谢谢你的帮助,我真的很感激!@soulshined我不太明白你所说的“质心”是什么意思。物体的中心?第一个点?六边形故意围绕着面板的中间(中间坐标以
x_0
y_0
计算,并在某种意义上作为坐标系的中心)。第一点也不应位于相对于中心的
(0,0)