gpt4 book ai didi

在彩色区域中绘制轮廓的算法

转载 作者:行者123 更新时间:2023-12-03 23:33:43 26 4
gpt4 key购买 nike

假设我有这样的图像:

original image

每个方 block 都是一个像素。它们是白色或红色的。

在给定轮廓宽度 w 的情况下,我想在红色区域周围绘制绿色轮廓。

我尝试了一些算法,但结果看起来不太好,对角线看起来很奇怪,不反射(reflect)原始图像:

my result

我应该使用什么方法来获得更流畅、更好的结果和良好的性能?

为简单起见,假设我有一个点 p 属于边界。

最佳答案

这是一个使用 JavaScript 的解决方案:

var matrix=[
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
];

function createMatrixDivs() {
for(var r=0; r<16; r++) {
for(var c=0; c<16; c++) {
var cell=document.createElement("div");
cell.style="border:1px solid blue;position:absolute;width:10px;height:10px;left:"+10*c+"px;top:"+10*r+"px;";
cell.id=r+","+c;
document.body.append(cell);
}
}
}

function drawMatrixDivs() {
for(var r=0; r<16; r++) {
for(var c=0; c<16; c++) {
document.getElementById(r+","+c).style.backgroundColor=(matrix[r][c]==0?"white":matrix[r][c]==1?"red":matrix[r][c]==2?"green":"gray");
}
}
}

function outline(w) {
for(var r1=0; r1<16; r1++) {
for(var c1=0; c1<16; c1++) {
if(matrix[r1][c1]==0) {
for(var r2=0; r2<16; r2++) {
for(var c2=0; c2<16; c2++) {
if(r2!=r1 && c2!=c1 && matrix[r2][c2]==1 && Math.round(Math.sqrt(Math.pow(r2-r1,2)+Math.pow(c2-c1,2)))<=w) {
matrix[r1][c1]=2;
}
}
}
}
}
}
drawMatrixDivs();
}

createMatrixDivs();
drawMatrixDivs();
outline(+prompt("Enter outline width: "));

关于在彩色区域中绘制轮廓的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64380412/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com