|
|
|
|
@ -65,9 +65,16 @@ public class MousePathUtil {
|
|
|
|
|
* @return 轨迹点集合
|
|
|
|
|
*/
|
|
|
|
|
public static List<int[]> generateBezierPath(int x0, int y0, int x1, int y1) {
|
|
|
|
|
// 计算两点间距离
|
|
|
|
|
double distance = Math.sqrt(Math.pow(x1 - x0, 2) + Math.pow(y1 - y0, 2));
|
|
|
|
|
|
|
|
|
|
// 根据距离动态调整控制点偏移范围,避免短距离时过度弯曲
|
|
|
|
|
// 距离越短,偏移量越小,最短距离时偏移范围约为±10,最长距离时约为±100
|
|
|
|
|
int maxOffset = (int) Math.min(100, Math.max(10, distance / 5));
|
|
|
|
|
|
|
|
|
|
// 随机生成控制点,增加不确定性(避免总是直线)
|
|
|
|
|
int controlX = (x0 + x1) / 2 + random.nextInt(200) - 100;
|
|
|
|
|
int controlY = (y0 + y1) / 2 + random.nextInt(200) - 100;
|
|
|
|
|
int controlX = (x0 + x1) / 2 + random.nextInt(maxOffset * 2) - maxOffset;
|
|
|
|
|
int controlY = (y0 + y1) / 2 + random.nextInt(maxOffset * 2) - maxOffset;
|
|
|
|
|
return generateBezierPath(x0, y0, controlX, controlY, x1, y1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|