Я работаю над подобной программе в C #. Я хочу иметь возможность стирать линию при нажатии рядом с ней (например, расстояние <10 пикселей). Я пробовал разные вычисления, и проблема, с которой я постоянно сталкиваюсь, заключается в том, что линия будет стерта только тогда, когда я щелкну рядом либо с начальной точкой линии, либо с конечной точкой. Кажется, что-то среднее между ними не работает. </p>
Пусть p будет точкой, по которой пользователь щелкнул в форме, начальный и конечный конечные точки линии.
double a = (endp.Y - startp.Y) / (endp.X - startp.X); // gradient
double b = endp.Y - a * endp.X; // y intercept
// condition such that it only works when i click close to the line segment,
// not the entire infinite line for which the calculation y=ax+b works
double yvalue = p.X * a + b; // value the line segment has at the x-value which the user clicks on
double alpha = Math.Atan((endp.X - startp.X) / (endp.Y - startp.Y));
double distance = Math.Sin(alpha) * Math.Abs((yvalue - p.Y));
if (distance<10)
// remove line
Почему этот код работает только для точек, близких к начальной и конечной точкам? Я уверен, что это не из-за условий, которые я использую, которые я оставил вне моего примера здесь