Processing 在变换格式和旋转网格上创建的对象实例

Processing 在变换格式和旋转网格上创建的对象实例,processing,processing.js,Processing,Processing.js,在下面的提琴中,我在递归树结构的某些点上画了圆圈 树结构本身是此处找到的树结构的简化版本: 如果我不是在变换和旋转的网格上(0,-h)画圆,而是在小提琴上画圆,我想挂在未旋转的y方向(向下)的钟摆。如果钟摆是一个对象类的实例,那么添加一个新实例而不是(或除了)绘制圆是很容易的 无效分支(浮动h){ h*=0.6; 如果(h>10){ pushMatrix(); 轮换(a); 直线(0,0,0,-h); 填充(0,175,0,100); 如果(h

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

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

如果我不是在变换和旋转的网格上(0,-h)画圆,而是在小提琴上画圆,我想挂在未旋转的y方向(向下)的钟摆。如果钟摆是一个对象类的实例,那么添加一个新实例而不是(或除了)绘制圆是很容易的

无效分支(浮动h){
h*=0.6;
如果(h>10){
pushMatrix();
轮换(a);
直线(0,0,0,-h);
填充(0,175,0,100);
如果(h<50){
//我可以在这里加一个新的钟摆,在(0,-h)
椭圆(0,-h,5,5);
}
平移(0,-h);
分支机构(h);
popMatrix();
}//关闭if语句
}//关闭分支函数
我已经试过了,但是因为我想让代码非常简短,所以我没有包括它。钟摆确实是挂起的,但方向很奇怪,因为当我创建这些实例时,整个网格是变换和旋转的(这需要简化绘制树或其他有趣结构的过程)

假设我想让这些钟摆对用户交互敏感。对象的参照系与用户的参照系不同

因此,我将尝试总结这个问题:

是否可以在变换和旋转的栅格上创建对象的实例,但该对象相对于未旋转栅格的行为是否符合规定


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

像这样的一般性问题“我该怎么做”或“可能吗”有点难。很难回答“是否可能”问题的原因是答案几乎总是是的,它是可能的。类似地,“我该怎么做”问题总是有大约一百万个可能的答案,并且没有任何一种解决问题的最佳方法。“正确”的答案实际上更取决于你对问题的看法,而不是其他任何东西。但我会尽力在一般意义上提供帮助

是否可以在变换和旋转的栅格上创建对象的实例,但该对象相对于未旋转栅格的行为是否符合规定

是的,有可能

您可以通过多种方式实现这一点:

  • 您可以跟踪当前状态(当前旋转),然后在绘制钟摆时撤消该状态。例如,如果旋转到90度,只需在绘制钟摆之前旋转-90度即可
  • 您可以使用
    screenX()
    screenY()
    函数获取转换点的屏幕位置。更多信息可在中找到
  • 可以在递归绘制树时存储位置,然后在绘制树后,可以在这些点上循环绘制钟摆
这些正是我现在能想到的,而且可能有更多的方法来实现它。同样,你选择哪种方法取决于这些东西如何融入你的大脑,这很难帮助你

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


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

根据您的两分钱,我使用trig绘制了一个草图,没有进行转换:因为没有任何东西是经过变换的,所以很容易得到我想要的位置。我可以更一般地考虑这条路线,但我仍然感兴趣的是,如果我走XFACT路线,我会选择什么样的选项。我将尝试为整个XSLAST和SHIFT添加一个对象属性,并使用它来计算未转换的位置。我对如何使用screenX/Y感到困惑。至于第三个,我尝试将位置存储在一个数组中,然后使用该数组创建新的实例,但这些实例都具有相同的坐标(在第一个和静态示例中,它们都位于(0,-h))。直觉上,我觉得你的第一个建议是我能做的事情,这看起来(在精神上)类似于根据x-y坐标计算PImage对象中像素数组的索引。@Jozurcrunch这些不是真正的建议,只是你可能会探索的几个不同选项。但更具体地说,您可能会使用
screenX()
screenY()
以及存储位置的方法。在将每个点添加到数据结构之前,您需要取消转换它,否则,正如您所发现的那样,您只会多次添加相同的点。关键是在“模型空间”中,你需要在存储它之前将其转换为“屏幕空间”。我来试一试。我想我已经做到了。我放弃了转换方法。这使画画更容易,但很难使用我画的东西。相反,我使用了基本trig。它更难画,但更容易使用所画的东西。我会考虑解决这个问题。我使用了两种方法:1)使用递归函数进行trig,2)每个分支都是对象的trig。在这两种情况下,我都可以轻松访问屏幕空间中沿结构的任何点。我将编辑我的问题,以表明它有某种解决方案。还有,谢谢你的指点;我知道我的问题还不够具体。