在xformed和rotate格式上创建的对象实例

时间:2017-09-14 01:57:50

标签: processing processing.js

在下面的小提琴中,我在递归树结构的某些点画圆圈。

https://jsfiddle.net/ypbprzzv/4/

树结构本身是这里找到的简化版本:

https://processing.org/examples/tree.html

如果不是在转换和旋转的网格上绘制(0,-h)的圆圈,而不是在小提琴中绘制它们的地方,我想悬挂在未旋转的y方向上悬挂的钟摆(向下) 。如果摆是对象类的实例,那么添加一个新实例将会很容易,而不是(或者除此之外)绘制圆形。

void branch(float h) {
  h *= 0.6;

  if (h > 10) {
    pushMatrix();
    rotate(a);
    line(0, 0, 0, -h);
    fill(0, 175, 0, 100);
    if (h < 50) {
      // I could add a new pendulum here, at (0, -h)
      ellipse(0, -h, 5, 5);
    }
    translate(0, -h);
    branch(h);
    popMatrix();
  } // closing the if statement
} // closing branch function

我已经尝试过这个但是因为我想保持代码非常简短,所以我没有把它包括在内。钟摆确实悬挂,但是在古怪的方向上,因为当我创建这些实例时,整个网格被成形并旋转(这需要简化绘制树或其他有趣结构的情况)。

并且假设我想让这些钟摆对用户交互敏感。对象的引用框架与用户的不同。

所以我会试着总结一下这个问题:

是否可以在变换和旋转的网格上创建对象的实例,但是该对象的行为是否与未旋转的网格相关?

提供包括钟摆在内的小提琴有用吗?

1 个答案:

答案 0 :(得分:1)

对于一般的“我该怎么做”或“有可能”这样的问题,有点难以帮助。难以回答“是否可能”问题的原因是答案几乎总是是的,这是可能的。同样,“我该怎么做”问题总是有大约一百万个可能的答案,以及没有任何一种解决问题的最佳方法。 “正确”的答案实际上更依赖于您对问题的看法而不是其他任何问题。但我会尽力帮助。

  

是否可以在变换和旋转的网格上创建对象的实例,但是该对象的行为是否与未旋转的网格相关?

是的,这是可能的。

您可以通过多种方式解决此问题:

  • 您可以跟踪当前状态(当前旋转),然后在绘制摆锤时撤消该状态。例如,如果你旋转到90度,你只需要在绘制钟摆之前旋转-90度。
  • 您可以使用screenX()screenY()函数来获取转换点的屏幕位置。更多信息可以在the reference
  • 中找到
  • 您可以在递归绘制树时存储位置,然后在绘制树之后,您可以遍历这些点以绘制摆锤。

这些正是我现在能想到的,并且可能有更多方法可以解决它。再次,你选择哪种方法实际上取决于这些东西如何适合你的大脑,这很难帮助你。

但是,如果你想要我的两分钱:我个人觉得很难“在转型中思考”去做你所描述的事情。相反,如果我是你,我会重构代码,因此它不再依赖于翻译和轮换。我会使用基本的trig(sin()cos()函数)来绘制所有内容。然后你已经进入了屏幕坐标,所以绘制你的钟摆会容易得多。

但是,你采取哪种方法实际上取决于你对事物的看法。