Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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#_Winforms_Visual Studio 2010_Graphics2d - Fatal编程技术网

C# 如何创建圆形截面?

C# 如何创建圆形截面?,c#,winforms,visual-studio-2010,graphics2d,C#,Winforms,Visual Studio 2010,Graphics2d,IDE:VisualStudio2010,c.NET4.0WinForms应用程序 您好,在我的应用程序中,我必须将一个设置在面板圆形图像上的圆形划分为8个部分。请建议如何将其划分为8个部分 范例 因为我想在这些部分上执行不同的鼠标下移事件。因此,如果您可以建议任何技巧方法或算法或dll或api来解决此问题,则效果会更好。将x、y坐标转换为极坐标半径,即与圆心的角度。然后,如果半径在圆内,则使用“角度”值计算用户单击的线段 例如,如果圆心位于xc、yc,并且在x、y中发生单击,则 将x、y坐标

IDE:VisualStudio2010,c.NET4.0WinForms应用程序

您好,在我的应用程序中,我必须将一个设置在面板圆形图像上的圆形划分为8个部分。请建议如何将其划分为8个部分

范例


因为我想在这些部分上执行不同的鼠标下移事件。因此,如果您可以建议任何技巧方法或算法或dll或api来解决此问题,则效果会更好。

将x、y坐标转换为极坐标半径,即与圆心的角度。然后,如果半径在圆内,则使用“角度”值计算用户单击的线段

例如,如果圆心位于xc、yc,并且在x、y中发生单击,则


将x、y坐标转换为极坐标半径,即与圆心的角度。然后,如果半径在圆内,则使用“角度”值计算用户单击的线段

例如,如果圆心位于xc、yc,并且在x、y中发生单击,则


问题最好用极坐标表示,而鼠标坐标通常用笛卡尔坐标值表示

若要转换,请计算鼠标位于控件的哪个部分,作为坐标偏移。 例如:

用于将偏移转换为[0,360]度的角度:

var angle = Math.Atan2(yOffset, xOffset)/Math.Pi*180 + 180;
现在使用“角度”值确定您所在的扇区:

int nSectors = 8;
int sectorId = (int)angle/360.0*nSectors;

问题最好用极坐标表示,而鼠标坐标通常用笛卡尔坐标值表示

若要转换,请计算鼠标位于控件的哪个部分,作为坐标偏移。 例如:

用于将偏移转换为[0,360]度的角度:

var angle = Math.Atan2(yOffset, xOffset)/Math.Pi*180 + 180;
现在使用“角度”值确定您所在的扇区:

int nSectors = 8;
int sectorId = (int)angle/360.0*nSectors;

很好,这个算法的名字是什么?嗯,我想它太短了,不配称为算法,但它是从笛卡尔坐标到极坐标的典型转换。请看:,Atan2需要反转参数。非常好,这个算法的名称是什么?我想它太短了,不值得称为算法,但它是从笛卡尔坐标到极坐标的典型转换。请参阅:,Atan2需要反转参数。我添加了负角度检查。我添加了负角度检查。