我正在处理应用程序,我在画布布局上有一条折线画,从上到下没有常规订单 鼠标移动到画布上,光标显示出来,我想强制他仅根据折线上鼠标位置的Y坐标移动。
到目前为止,我通过找到每厘米在画布上占用多少像素(折线是它们之间具有独立空格的范围的集合)来成功实现它,但它还不够好。
有人可以用另一种方式思考吗?
答案 0 :(得分:0)
看一下polyline.PointToScreen和PointFromScreen,这样你就可以得到相对于折线(0,0)的Point p = mouse coords。
然后,您将必须计算折线的每个段上的p投影。
提示:计算P'= P在段S上的投影(P1,P2)
并且在经过所有折线段S时,始终保持P',其中dist(PP')最小。
最后:将鼠标位置设为P'。
这样您就可以将鼠标完全放在折线上。
如果仍然卡住,您可以显示您的代码,这样我就可以更精确地向您展示。
仅从水平线搜索的精确答案:
你可以为yCoord做同样的事情: 如果折线段仅在X轴上相互跟踪,则搜索段与垂直线之间的交点(鼠标xCoord) 如果折线段在Y轴上相互跟踪,则搜索段与水平线(鼠标yCoord)之间的交点
Il折线不遵循任何规则,使用第一个答案是最佳选择。