【发布时间】:2015-10-02 08:37:50
【问题描述】:
我正在为城市可视化气泡,如果城市具有更大的价值,则更大。例如:
London: 14500
New York: 100
Tokyo: 1100
数值范围从 ~100-15000
我无法创建一个返回合理值的函数,因此 100 个值的气泡不会太小。我能想到的唯一方法是设置最小尺寸,例如:
if (size < 5) { size = 5 }
但是,这会导致价值约为 100 的城市看起来与价值约为 1000 的城市非常相似。我希望大约 0-15000 的值返回为 0.5 和 1 之间的值(或类似的值)。这将如何实现?
这是我到目前为止所拥有的,但就像我说的那样,它导致 100 和 1000 的值都低于最小值:
var minBulletSize = 7.5;
var maxBulletSize = 20;
var maxSquare = maxBulletSize * maxBulletSize * 2 * Math.PI;
var minSquare = minBulletSize * minBulletSize * 2 * Math.PI;
// create circle for each location
for (var i = 0; i < mapData.length; i++) {
var dataItem = mapData[i];
var value = dataItem.value;
// calculate size of a bubble
var square = (value/1000 - minBulletSize) / (maxBulletSize - minBulletSize) * (maxSquare - minSquare) + minSquare;
if (square < minSquare) {
square = minSquare;
}
if (square > maxSquare) {
square = maxSquare;
}
var size = Math.sqrt(square / (Math.PI * 2));
var id = dataItem.code;
}
【问题讨论】:
-
标题与描述不符,更新一下
-
在可视化气泡时,不是可视化它们的实际值,而是可视化它们的对数
-
可以使用多少像素?画布的尺寸是多少?你有多少个城市?圆圈大小算法取决于您目前拥有的定位算法,因此如果您也可以分享它会很棒。
-
@svs 我在上面的代码中添加了
-
@JohnDoe 等等你的圈子在哪里?我期待
(x, y)中心。我不明白min/maxBulletSize,min/maxSquare是什么意思,你能解释一下你现在的想法吗?对您的代码进行语义化。
标签: javascript algorithm logarithm