Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.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# ArcSegment C公式以获取圆弧WPF上的特定点_C#_Wpf_Wpf Controls - Fatal编程技术网

C# ArcSegment C公式以获取圆弧WPF上的特定点

C# ArcSegment C公式以获取圆弧WPF上的特定点,c#,wpf,wpf-controls,C#,Wpf,Wpf Controls,我有一个从路径绘制的画布上的弧,带有以下细节。我要拿到115225分。请查看屏幕截图以获取更多详细信息。请帮助我获得公式,以达到115225点 startX=250 startY=250 ArcSegment Size (70,70) ArcSegment Point (250,200) Computation var meanX=(startX+startX)/2-rX;//(250+250)/2-70=180 var meanY=(startY+ArcSegment.Point.Y)/2

我有一个从路径绘制的画布上的弧,带有以下细节。我要拿到115225分。请查看屏幕截图以获取更多详细信息。请帮助我获得公式,以达到115225点

startX=250
startY=250
ArcSegment Size (70,70)
ArcSegment Point (250,200)

Computation
var meanX=(startX+startX)/2-rX;//(250+250)/2-70=180 
var meanY=(startY+ArcSegment.Point.Y)/2-rY;//(250+200)/2-70=225
//center Point (180,225)
//What is the formula if I want to get Point(115,225)
XAML

截图
经过几个小时的研究,我发现一切都在这里

 var geometry = path.Data as PathGeometry;
 var leftX=geometry.Bounds.Location.X;
 var topY=geometry.Bounds.Location.Y;

我一点也不确定我是否遵循了你想要实现的目标。但这看起来像一个圆的一部分,而不仅仅是任何一个旧的圆弧。在我看来,某种形式的平均角度,然后使用向量或方位角从中心平移将是一种方法。如果近似整数值可行,还有bresenham圆,您需要进行大量计算。如果您已经知道该值,为什么需要计算点115225?这将在路径的矩形边界上给出一个点,而不是圆。为了获得圆上的点,您需要计算其中心点,例如,在Cx,Cy处,半径为R时,从角度a x=Cx+R*cosA,y=Cy+R*sinA获得点。请注意,角度通常以弧度表示,即整圆为2*pi,a=0是正X轴上的一个点,即右侧。对于不同的起始角度,可能需要将常量值添加到。
private void Path_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            var curve = sender as Path;
            var geometry = curve.Data as PathGeometry;
            var figure = geometry.Figures.FirstOrDefault();
            var arcSegment = figure.Segments.FirstOrDefault() as ArcSegment;
            var startX = figure.StartPoint.X;
            var yStart = figure.StartPoint.Y;
            var startAngle = arcSegment.Point.X;
            var sweepAngle = arcSegment.Point.Y;
            var rX = arcSegment.Size.Width; 
            var rY = arcSegment.Size.Height; 
            var endAngle = startAngle + sweepAngle;
            var meanX = (startX + startAngle) / 2 - rX;
            var meanY = (yStart + sweepAngle) / 2 - rY;
            
        }
 var geometry = path.Data as PathGeometry;
 var leftX=geometry.Bounds.Location.X;
 var topY=geometry.Bounds.Location.Y;