我正在开发一些微合同印刷模式,以创建受控细胞生长的模板。模板的主模型打印在A4透明度上,无论我使用多少空间,成本大致相同。我的一个模式大约是2 x 2 mm,所以你可以想象我可以在主模板上放多少。
考虑到这一点,我想要做的是生成重复的圆圈和轨道数组。这在adobe illustrator中很容易实现,但它变得乏味。我想自动改变圆的尺寸,连接它们的轨道宽度以及圆圈之间的空间。
例如,我可能想要一个20 x 20网格的30微米圆圈连接10毫米宽的轨道,边缘之间的圆圈为150微米。
我希望在Matlab中这样做,因为我目前正在学习Matlab的一些图像处理功能。
可以看到最终产品的样子: http://www.nature.com/srep/2014/140424/srep04784/full/srep04784.html http://pubs.rsc.org/en/Content/ArticleLanding/2011/LC/c1lc20257j#!divAbstract
我很欣赏一些方向:
谢谢!
答案 0 :(得分:0)
我不熟悉Matlab所以我不能告诉你0)。
以下是1)和3)的可能答案。如果您认为我的答案可以帮助您,我可以写一些关于2)的代码。
图书馆d3.js可能对您正在做的事情感兴趣。它基本上允许您将数据绑定到svg元素。
以下是您可以做的一个示例。我们假设您的数据是圈子属性列表(大小,位置)
JSFiddle here
data = [ {x: 20µm, y:250µm, radius: 250µm}, {....}, ... ]
//Dimensions of what will be dsplayed in your browser
width = 500px
height = 700px
//d3.js provides functions to automatically resize your data to the viewport (maps domain -> range)
xScale = d3.scale.linear()
.domain([0, a4_format_size_x])
.range([0, width])
yScale = d3.scale.linear()
.domain([0, a4_format_size_y])
.range([0, height])
rScale = d3.scale.linear()
.domain([0, max_circle_size])
.range([0, 20])
svg = d3.select(element[0])
.append("svg")
.attr("width", width)
.attr("height", height)
svg.selectAll("circle")
.data(data) // This line binds your date to SVG elements
.enter()
.append("circle")
.attr("cx", function(data) { return xScale(data.x)})
.attr("cy", function(data) { return yScale(data.y)})
.attr("r", function(data) { return rScale(data.radius)}
注意:语法selectAll>输入>追加可能看起来很奇怪,如果你感到困惑,请随时查看this
现在为了生成数据本身("圆圈网格"),您可能会有类似
的内容var numCirclesX = 500
var numCirclesY = 700
var data = []
for(var i=0; i<numCirclesX; i++){
for(var j=0; j<numCirclesY, j++){
data.push({ x: i*size_A4_x/numCirclesX,
y: j*size_A4_y/numCirclesY,
radius: 5 })
}
}