WPF Math用于在两个任意点之间使用ArcSegment的半圆

NVM*_*NVM 18 wpf geometry

有人可以使用WPF中的ArcSegment显示在两个任意点之间绘制半圆的数学运算.

我对ArcSegment中的RadiusX,RadiusY很困惑.它似乎不是相对于两个点而是相对于X和Y轴.这是真的应该如何?

Jar*_*rek 40

你说得对,SizeArcSegment不是定义弧段的起点和终点之间的半径.此属性描述了应在这些点之间绘制的椭圆的大小.如果您想要一个圆而不是一个椭圆,您必须记住始终将大小的x和y值设置为相同.如果你想要总共绘制一半的圆,你还需要确保Size这两个点之间的距离的一半.

例如,看下面的代码:

<Canvas>
    <Path Stroke="Black">
        <Path.Data>
            <PathGeometry>
                <PathFigure StartPoint="100,100">
                    <ArcSegment IsLargeArc="True"
                                Size="50, 50"
                                Point="200, 100"
                                SweepDirection="Clockwise" />
                </PathFigure>
            </PathGeometry>
        </Path.Data>
    </Path>
</Canvas>
Run Code Online (Sandbox Code Playgroud)

这将绘制圆的上半部分,从点开始并在点100, 100结束200, 100.由于我将Size属性设置为50, 50(这些点之间的距离为100),因此这将创建正好一半的圆.SweepDirection状态,这个圆圈应顺时针绘制,这就是为什么它会画上半部分的原因.查看下面ClockwiseCounterclockwise屏幕之间的区别:

50,50,顺时针 50,50,反向

IsLargeArc选择是否绘制更大的椭圆或更小的部分.由于我画了一半的圆圈,这没有任何意义,但是如果你要绘制不同大小的椭圆,这将显着改变输出外观,只需用它来看它是如何工作的.

这是当你尝试使用其大弧形部分放置200, 200尺寸弧时的外观clockwise.正如你所看到的 - 弧甚至不适合窗口(这是从WPF设计师拍摄的,在正常的app溢出部分会被切断)

200,200,顺时针,大弧 这是同样的事情,但设置为显示小弧: 200,200,顺时针,不是largearc

当我更改Size属性时200, 200,绘制的圆圈只是大4倍,但仍然以您定义的精确点开始和结束.Size与点无关,在这些点之间绘制椭圆/ cricle,但它会改变椭圆形外观.

我希望它表明你是什么意思SizeArcSegment,随便问更详细的问题,如果你仍然感到困惑.

  • @NVM即使MSDN文档很好,用于实现弧功能的几何模型也很恶心,它违反了最少惊喜的原则,并且不同于其他所有绘图API ... (4认同)