Javascript 使用RaphaelJS在任意位置的形状集周围绘制边框
我正在使用RaphaelJS在纸上的任意位置绘制一组形状,使用以下代码: 我现在要做的是找到最外面的一组位置,这样我就可以在整个组周围画一个边界。例如: 有人能帮忙吗?谢谢。好的,使用算法和python实现,我成功地组合了我自己的JS/RaphaelJS解决方案,可以在这里找到: 以防它消失,下面是代码:Javascript 使用RaphaelJS在任意位置的形状集周围绘制边框,javascript,graphics,raphael,Javascript,Graphics,Raphael,我正在使用RaphaelJS在纸上的任意位置绘制一组形状,使用以下代码: 我现在要做的是找到最外面的一组位置,这样我就可以在整个组周围画一个边界。例如: 有人能帮忙吗?谢谢。好的,使用算法和python实现,我成功地组合了我自己的JS/RaphaelJS解决方案,可以在这里找到: 以防它消失,下面是代码: (function() { function cmp(x, y) { if (x > y) { return 1;
(function() {
function cmp(x, y) {
if (x > y) {
return 1;
} else if (x < y) {
return -1;
} else {
return 0;
}
}
function turn(p, q, r) {
return cmp((q[0] - p[0]) * (r[1] - p[1]) - (r[0] - p[0]) * (q[1] - p[1]), 0);
}
function dist(p, q) {
var dx = q[0] - p[0];
var dy = q[1] - p[1];
return dx * dx + dy * dy;
}
function next_hull_pt(points, p) {
var q = p,
r,
t;
for (var i = 0; i < points.length; i++) {
r = points[i];
t = turn(p, q, r);
if (t == -1 || t == 0 && dist(p, r) > dist(p, q)) {
q = r;
}
}
return q;
}
function convex_hull(points) {
var left,
point;
for (var i = 0; i < points.length; i++) {
point = points[i];
if (!left || point[0] < left[0]) {
left = point;
}
}
var hull = [left],
p,
q;
for (var i = 0; i < hull.length; i++) {
p = hull[i];
q = next_hull_pt(points, p);
if (q[0] != hull[0][0] || q[1] != hull[0][1]) {
hull.push(q);
}
}
hull.push(left);
return hull;
}
var paper = Raphael(0, 0, 800, 800),
set = paper.set(),
points = [],
point;
for (var i = 0; i < 20; i++) {
points[i] = [
Math.round(Math.random() * 500) + 100,
Math.round(Math.random() * 500) + 100
];
}
for (var i = 0; i < points.length; i++) {
point = points[i];
set.push(paper.circle(point[0], point[1], 5));
}
set.attr('fill', '#ff0000');
set.attr('stroke', '#ffffff');
var outline = convex_hull(points),
previous = [0, 0],
path = 'M';
for (var i = 0; i < outline.length; i++) {
point = outline[i];
path = path + (i == 0 ? 'M' : 'L') + point[0] + ',' + point[1] + ' ';
}
var path = paper.path(path);
path.attr('stroke', '#0000ff');
})();
(函数(){
函数cmp(x,y){
如果(x>y){
返回1;
}else if(xdist(p,q)){
q=r;
}
}
返回q;
}
函数凸包(点){
左,
指向
对于(变量i=0;i
@EliranMalka-在这里提问不构成一种研究形式吗?好吧,你应该先研究其他资源(例如,至少尝试解决你自己的问题),以获得观众的同情。我看了一下,但什么也找不到,主要是因为我不知道我在找什么。一旦我发现这被称为“凸包”,我就设法找到了一些好的资源,并提出了一个解决方案,我将在下面发布。