Допустим, у вас есть сплайн Безье, нарисованный на холсте следующим образом:
<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>
Как бы вы определяли, какие пиксели на холсте пересекаются центром пути (то есть толщина штриха не учитывается)?
1 ответ
Если вы имеете в виду, что хотите найти центральную точку вдоль пути. Я думаю, нам нужно что-то сделать с данными пути, которые на самом деле являются 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);
}
Похожие вопросы
Новые вопросы
.net
НЕ используйте для вопросов о .NET Core - используйте вместо этого [.net-core]. .NET Framework - это программная среда, предназначенная главным образом для операционной системы Microsoft Windows. Он включает в себя реализацию библиотеки базовых классов, общеязыковой среды выполнения (обычно называемой CLR), общей системы типов (обычно называемой CTS) и динамической среды исполнения. Он поддерживает множество языков программирования, включая C #, VB.NET, F # и C ++ / CLI.