【发布时间】:2015-12-22 18:11:58
【问题描述】:
在寒假回家时,我将尝试使用 Processing 编程语言(Java 风格)制作一些很酷的东西。对于我的第一个项目,我想定义一个自定义 Line 类,以便更轻松地在线进行数学运算。在 python 中,它会是这样的:
import numpy as np
class Line():
def __init__(self, x1, y1, x2, y2):
self.x1, self.x2 = x1, x2
self.y1, self.y2 = y1, y2
@property
def p1(self):
return np.array([self.x1, self.y1])
@property
def p2(self):
return np.array([self.x2, self.y2])
这样,如果 x1, ..., y2 改变,相应的点向量也会改变。显然这个例子效率有点低,但重点仍然存在。在javascript中,我知道Object.defineProperty(obj, prop, descriptor),但不清楚
- 如何在处理中做到这一点
- 这在哪里发挥作用。定义类时的等效操作是什么?
编辑:澄清为什么@property 特别有用:
假设我希望以两种方式表示线,这两种方式都将由 Line 对象存储:
- 一,原版:两个点,p1 和 p2,每个点都由一个 x、y 坐标组成。
- 两个带有两个点 u 和 v 的参数化版本,使得 p1 = u 和 p2 = u + v,线段上的任何点由 u + t * v 给出,其中 t 是 0 和1.
如果 p2 改变了,v 也会改变,反之亦然。更改 p1 将同时更改 u 和 v。就参数化版本而言,有些数学更容易做,而就香草版本而言,有些数学更容易做,所以我希望对任何属性所做的任何更改都正确更新其他属性,使 p1、p2 和 u、v 始终表示相同的行。
在 python 中,我可以修改属性的 setter 和 getter 方法以适当地解决所有这些问题,但我似乎无法确定在 Processing 中执行此操作的方法。
【问题讨论】:
-
您打算使用哪种处理方式? (Java/JavaScript/Python/等?)?
-
Java(我认为是原始的?)。最初我只是打算做 Python,但我一直坚持寻找 x 的 python 版本来完成任务 y。
标签: java python class processing processing.js