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

时间:2011-03-17 07:31:57

标签: wpf geometry

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

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

1 个答案:

答案 0 :(得分:36)

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

例如,请查看以下代码:

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> 开始,到点100, 100结束。由于我已将200, 100属性设置为Size(这些点之间的距离为100),因此这将创建正好一半的圆。 50, 50表示,该圆圈应顺时针绘制,这就是为什么它会画上半部分的原因。在下面的屏幕上查看SweepDirectionClockwise之间的差异:

50, 50, clockwise 50, 50, counterclokwise

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

当您尝试使用其大弧部分放置IsLargeArc大小的弧200, 200时,它就是这样的。正如你所看到的 - 弧甚至不适合窗口(这是从WPF设计师拍摄的,在正常的app溢出部分会被切断)

200, 200, clockwise, largearc 这是同样的事情,但设置为显示小弧: 200, 200, clockwise, not largearc

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

我希望它能告诉您SizeSize的含义是什么,如果您仍然感到困惑,请随时提出更详细的问题。