如何创建圆形截面?

时间:2014-02-26 16:07:06

标签: c# winforms visual-studio-2010 graphics2d

IDE:Visual Studio 2010,c#.net 4.0 winforms application。

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

示例
Example

因为我想在这些部分上执行不同的鼠标按下鼠标向上事件。所以如果你能建议任何技巧方法或算法或dll或api来解决这个问题会更好。

2 个答案:

答案 0 :(得分:3)

将(x,y)坐标转换为圆心的极坐标(半径,角度)。然后,如果半径在圆圈内,请使用角度值来确定用户单击的段。

例如,如果圆圈的中心位于(xc,yc),并且(x,y)中出现点击,则

float dx = x-xc, dy = y-yc;
float radius = (float)Math.Sqrt(dx*dx+dy*dy);
float angle = (float)Math.Atan2(dy,dx);
if(angle<0) { angle += 2*Math.PI; }
float segment_angle = 2*Math.PI/8;

if( radius <= diameter/2)
{
    int segment = (int)(angle/segment_angle);
}

答案 1 :(得分:3)

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

要转换,请计算鼠标所在控件的哪个部分,作为坐标偏移量。 如,

var xOffset = xMouse - xCenter;
var yOffset = yMouse - yCenter;

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

var angle = Math.Atan2(yOffset, xOffset)/Math.Pi*180 + 180;

现在使用角度值来确定您所在的行业:

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