【问题标题】:ArcSegment C# Formula To Get A Specific Point on Arc WPFArcSegment C# 公式获取 Arc WPF 上的特定点
【发布时间】:2020-09-26 01:59:57
【问题描述】:

我在从 Path 绘制的画布中有弧线,其中包含以下详细信息。我想得到点(115,225)。请查看屏幕截图以获取更多详细信息。请帮我把公式算到点 (115,225)。

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

<Canvas Name="canvas" Background="White" Opacity="99">
         <Path Stroke="Blue" MouseLeftButtonDown="Path_MouseLeftButtonDown" >
            <Path.Data>
                <PathGeometry>
                    <PathFigureCollection>
                        <PathFigure StartPoint="250,250" IsClosed="True">
                            <ArcSegment Size="70,70" IsLargeArc="True" SweepDirection="Clockwise" Point="250,200"/>
                        </PathFigure>
                    </PathFigureCollection>
                </PathGeometry>
            </Path.Data>
        </Path>
    </Canvas>

C#

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;
            
        }

截图

【问题讨论】:

  • 我完全不确定我是否遵循您想要实现的目标。但这看起来像是一个圆圈的一部分,而不是任何旧的弧线。在我看来,某种平均角度然后使用矢量或方位角从中心平移将是要走的路。如果近似整数值可行并且您需要进行大量此类计算,那么还有 bresenham 圆。
  • 既然已经知道值,为什么还要计算点115225?

标签: c# wpf wpf-controls


【解决方案1】:

经过数小时的研究,我发现一切都在这里。

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

【讨论】:

  • 这将在路径的矩形边界上为您提供一个点,而不是圆。为了在圆上得到一个点,您需要计算它的中心点,例如在 (Cx,Cy) 处,半径为 R,从角度 A 通过 x = Cx + R * cos(A), y = Cy + R * sin(A) 得到一个点。请注意,角度通常以弧度表示,即一个完整的圆是 2*pi,并且 A=0 是正 X 轴上的一个点,即在右侧。您可能需要为 A 添加一个常数值以获得不同的起始角度。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-28
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 2017-03-16
  • 1970-01-01
  • 2012-02-20
相关资源
最近更新 更多