假设您在画布上绘制了Bezier样条曲线,如下所示:
<Canvas x:Name="SomeCanvas" Width="50" Height="50" Background="Black">
<Path x:Name="SomePath" Data="M0,0C10,10 10,50 50,10" Stroke="Yellow" StrokeThickness="1"/>
</Canvas>
如何确定画布中哪些像素与路径中心相交(意味着忽略笔画粗细)?
答案 0 :(得分:4)
如果您的意思是想要找到中心点 沿 路径。我认为我们必须对Path的数据做一些实际上是Geometry
的事情。 Geometry
有一个名为GetFlattenedGeometryPath
的方法,返回PathGeometry
,其方法名为GetPointAtFractionLength
。所以你可以尝试这样的事情:
Point centerPoint;
Point tg;
SomePath.Data.GetFlattenedGeometryPath()
.GetPointAtFractionLength(0.5, out centerPoint, out tg);
如果你的意思是想要找到所有要点,我认为这个问题有点抽象。从技术上讲,有无数的点。因此,您可以使用以下代码找到沿路径均匀分散的1000个点:
Point p;
Point tg;
var points = new List<Point>();
for(var i = 0; i < 1000; i++){
SomePath.Data.GetFlattenedGeometryPath()
.GetPointAtFractionLength(i / 1000f, out p, out tg);
points.Add(p);
}