如何在屏幕上的网中对对象进行分组?

我正在做一个关于思考和记忆过程的模拟,我有一些图片(例如:奶牛、飞机、橘子)需要在屏幕上以类似思维导图的风格展示。每个对象都与其他三个对象相连,并且看起来应该像一张网。

我可以使用什么算法?另外,我正在使用 JS,但伪代码或解释也行。


回答:

  • 首先,将您的数据放入一个可用的结构中:
  • 按顺序绘制您的节点,同时也绘制 ID 大于当前节点的兄弟节点。
  • 您需要在当前节点周围以 120 度的偏移量绘制您的兄弟节点,以形成您的网络(3 个兄弟节点,360/3 = 120)。

一些 JavaScript 代码来展示:

// 初始化你的数据var nodes = {    1: {src: "imageA", siblings: [2,3,4]},    2: {src: "imageB", siblings: [1,5,6]},    3: {src: "imageC", siblings: [1,7,8]},    4: {src: "imageD", siblings: [1,9,10]},    5: {src: "imageE", siblings: [2]},    6: {src: "imageF", siblings: [2]},    7: {src: "imageG", siblings: [3]},    8: {src: "imageH", siblings: [3]},    9: {src: "imageI", siblings: [4]},    10: {src: "imageJ", siblings: [4]},}// 初始化我们将要用到的一些常量var DIST = 200; // 图像之间的像素距离var IMGW = 64; // 图像宽度var IMGH = 64; // 图像高度var SCX = 400; // 屏幕中心 x 坐标var SCY = 400; // 屏幕中心 y 坐标var DEGSSTART = 90; // 起始角度偏移var DEGFLIP = 180; // 添加以翻转方向var DEGSTEP = 120; // 圆 360 / 3// 注意:如果你的兄弟节点多于 3 个,请适当更改 DEGSTEP// 主函数function drawWeb(nodes, id, cx, cy, prevDeg) { var node = nodes[id]; // 绘制当前节点/图像 var xOff = cx - (IMGW / 2); var yOff = cy - (IMGH / 2); drawImage(node.src, Math.round(xOff), Math.round(yOff)); // 递归地绘制兄弟节点 var newDeg = prevDeg + DEGFLIP + DEGSTEP;  for(var i=0; i<node.siblings.length; i++) {  var newId = node.siblings[i];  if(newId > id) {   // 转换为弧度并计算新位置   var rad = newDeg * Math.PI / 180;   var newCX = cx + DIST * Math.cos(rad);   var newCY = cy + DIST * Math.sin(rad);   drawWeb(nodes, newId, newCX, newCY, newDeg);   newDeg += DEGSTEP;  } }}// 你可以自定义的绘制函数// 使用 jquery 或其他方法function drawImage(src, x, y) { // 填充代码以将图像放在屏幕上 console.log(src + ': ' + x + ', ' + y);}// 测试drawWeb(nodes, 1, SCX, SCY, 90);

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注