jquery:将 4 个点排序为(左上角、右上角、右下角、左下角)
jquery: sort 4 points to (top-left, top-right, bottom-right, bottom-left)
给定:2 个数组,每个数组包含 4 个点的坐标:
point_array_a = [point_a_1_x, point_a_1_y, point_a_2_x, ..., point_a_4_y]
point_array_b = [point_b_1_x, ... ..., point_b_4_y]
任务:
对point_array_a进行排序,以便最后按以下顺序列出点:
point_array_a_sorted = [top-left_x, top_left_y, top-right_x, top-right_y, bottom-right_x, bottom_right_y, bottom-left_x, bottom_left_y]
以相同的方式对point_array_b进行排序,以便point_a_k_l对应于开头的point_b_k_l。
恐
怕没有简单的算法。但是以下代码片段将完成这项工作(假设具有较大 y 坐标的点低于具有较低 y 坐标的点):
var i, points = [], leftX = point_array_a[0], topY = point_array_a[1];
for (i = 0; i < 4; i++)
{
leftX = Math.min(leftX, point_array_a[i * 2]);
topY = Math.min(topY, point_array_b[i * 2]);
points.push([
[point_array_a[i * 2], point_array_a[i * 2 + 1]],
[point_array_b[i * 2], point_array_b[i * 2 + 1]]
]);
}
points.sort(function(first, second){
if (first[0][0] == leftX)
return first[0][1] == topY ? -1 : 1;
if (second[0][0] == leftX)
return second[0][1] == topY ? 1 : -1;
return first[0][1] < second[0][1] ? -1 : 1;
});
var point_array_a_sorted = [], point_array_b_sorted = [];
for (i = 0; i < 4; i++)
{
point_array_a_sorted.push(points[i][0][0], points[i][0][1]);
point_array_b_sorted.push(points[i][1][0], points[i][1][1]);
}
我们利用现有的Array.sort
函数,为它提供正确的对象来比较和交换——点对。
相关文章:
- 在Masonry的左上角放置角戳
- 我的鼠标向下功能不是从最近的点画线,而是从左上角画线
- 如何在图像右上角显示删除按钮
- 如何在JS中的屏幕右上角插入一个浮动按钮
- 所有事件都显示在左上角(Jquery Full Calender)
- 想要通过GET方法从URL获取值,然后想在我的标题区域的右上角显示这些值
- 如何修复网页可见部分右上角的菜单
- 如何通过单击浏览器右上角的图像来启用/禁用自定义 chrome 扩展程序
- “匿名”出现在我的Wordpress页面的左上角
- 同位素 - 单击以展开图像和左上角的位置
- jquery:将 4 个点排序为(左上角、右上角、右下角、左下角)
- 如何将背景图像定位到 html 元素的左上角和右下角
- 必应地图显示地图的左上角的北美
- SVG 元素在容器的左上角显示
- 将画布图纸动态定位到容器的左上角
- Dojo 对话框关闭事件在 X 上(右上角)
- 右上角的四分之一圆
- 左上角的徽标滚动到屏幕停止
- CSS/jQuery-响应设计的关闭按钮停留在右上角
- 中心点在左上角