作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
给定: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
函数,为其提供正确的对象以进行比较和交换——点对。
关于javascript - jquery:将 4 个点排序为(左上、右上、右下、左下),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27386066/
我找到了 this回答如何确定鼠标在上、右、下和左方向上移动的问题,但我需要对 Angular 线而不是四个直线方向。 这是我的代码: var deltaX = window.mxShapeRes -
我正在构建一个网站,当用户将鼠标悬停在产品上时,我想为该图像设置左上角、右上角、左下角和右下角的边框。由于 CSS 属性 border-top-left-image 在多年前就被弃用了,唯一的其他解决
给定:2 个数组,每个包含 4 个点的坐标: point_array_a = [point_a_1_x, point_a_1_y, point_a_2_x, ..., point_a_4_y] poi
我对 opencv 的 Sobel 边缘检测器有疑问。 从它的文档来看,它似乎只适用于水平和垂直方向的边缘(通过指定 0,1 或 1,0)。 有没有人知道如何使用 cvSobel 获得对角线边缘 45
我是一名优秀的程序员,十分优秀!