Есть класс для отрисовки кривой:
class Curve
{
// Набор точек.
public List
// Толщина кривой.
public int Thinkness {get; set;}
public void Draw(Graphics g)
{
using (var pen = new Pen(Color.Black, Thinkness))
{
g.DrawCurve(pen, Points);
}
}
}
Отрисовка выполняется методом Graphics.DrawCurve. Нужно добавить метод, который будет определять, принадлежит ли произвольная точка этой кривой:
public bool Contains(Point pt);
Кто-нибудь может подсказать алгоритм, с помощью которого можно решить данную задачу? Может быть, каким-то образом можно использовать Matrix или сам Graphics?
Ответ
Придумал следующее решение.
В методе Draw рисуем не закругление (DrawCurve), а Path (DrawPath). Способ получения Path и пера выносим в отдельные методы. После этого используем метод IsOutlineVisible для получения информации о вхождении точки в Path.
class Curve
{
// Набор точек.
public List
// Толщина кривой.
public int Thinkness {get; set;}
private GraphicsPath GetPath()
{
var path = new GraphicsPath();
path.AddCurve(Points.ToArray());
return path;
}
private Pen GetPen()
{
return new Pen(Color.Black, Thinkness);
}
public void Draw(Graphics g)
{
using (var pen = GetPen())
using (var path = GetPath())
{
g.DrawPath(pen, path);
}
}
public bool Contains(Point p)
{
using (var pen = GetPen())
using (var path = GetPath())
{
return path.IsOutlineVisible(p, pen);
}
}
}
Комментариев нет:
Отправить комментарий