在Xformed和旋转网格上创建的对象实例



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

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

树结构本身是此处找到的简化版本:

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

,如果不是在转换和旋转的网格上(0,-h)在小提琴中绘制的地方(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

我已经尝试过,但是因为我想保持代码非常简短,所以我还没有包含它。摆的确实确实悬挂了,但是在古怪的方向上,因为当我创建这些实例时,整个网格被X型和旋转(需要简化绘图的树或其他有趣的结构)。

和假设我想使这些摆对用户交互敏感。对象的参考框架与用户不同。

所以我会尝试总结一个问题:

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

提供包括摆在内的小提琴会有所帮助吗?

很难帮助一般"我该怎么做"或"可能"这样的问题。很难回答"可能是可能的"问题的原因是答案几乎总是是的,这是可能的。没有任何最佳方法来解决问题。"正确"的答案实际上更依赖于您对问题的看法。但是我会尽力从一般意义上提供帮助。

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

是的,可能。

您可能有多种方法:

  • 您可能会跟踪当前状态(当前旋转),然后在绘制摆时撤消。例如,如果您旋转到90度,则在画摆之前只需旋转-90度。
  • 您可以使用screenX()screenY()功能来获取转换点的屏幕位置。可以在参考中找到更多信息。
  • 您可以在递归绘制树时存储位置,然后在绘制树时,您可以循环沿这些点绘制摆。

这些只是我现在能想到的,并且可能有更多方法可以解决。同样,您选择的方法确实取决于这些东西如何适合您的大脑,这很难帮助您。

但是,如果您想要我的两分钱:我个人发现很难"思考转换"来做您所描述的事情。相反,如果我是您,我会重构代码,因此它不再依赖于翻译和旋转。我将使用基本TRIG(sin()cos()功能)来绘制所有内容。然后,您已经在屏幕坐标中,因此绘制摆锤会容易得多。

但是,再次,您采用哪种方法取决于您对事物的看法。

最新更新