我正在尝试创建一个用于定义2D几何体的python类 - 主要用于基于work of Christopher Olah的3D打印工具路径创建工作。我的union()函数有问题。
我要做的是将两个函数传递给它,例如一个生成圆的隐函数和一个生成平方的隐函数。这些函数生成一个定义几何形状的曲面。例如,圆形生成在半径r处与Z = 0交叉的表面。
我想结合形状 - 所以传入两个形状函数,然后返回一个可以在x,y有序对上计算的函数。我的union()函数似乎不起作用,我认为问题来自于尝试生成一个lambda函数,该函数将两个lambda函数作为参数,并根据这两个lambda函数返回的内容返回结果。 / p>
有办法做到这一点吗?我不想离散我的几何 - 我希望能够插入任何x,y点并得到一个值 - 在我绘制的地方,我生成一个X,Y网格并解决这个问题,但是我在创建刀具路径的时候,我希望能够持续不断的界限。
class geometer():
def __init__(self):
pass
def circle(self, r, c):
circ = lambda x, y: np.sqrt(np.power(x - c[0], 2) + np.power(y - c[1], 2)) - r
return circ
def rect(self, l, w, c):
rect = lambda x, y: np.maximum(np.abs(x + c[0]) - w, np.abs(y + c[1]) - l)
return rect
def union(self, A, B):
return lambda A, B: np.minimum(A, B)
def plot(self, geosym):
root = Tk.Tk()
root.wm_title("Embedding in TK")
f = Figure(figsize=(5, 4), dpi=300)
a = f.add_subplot(111)
X, Y = np.meshgrid(np.linspace(-5, 5, 1000), np.linspace(-5, 5, 1000))
z = geosym(X, Y)
a.imshow(z)
# a tk.DrawingArea
canvas = FigureCanvasTkAgg(f, master=root)
canvas.show()
canvas.get_tk_widget().pack(side=Tk.TOP, fill=Tk.BOTH, expand=1)
toolbar = NavigationToolbar2TkAgg(canvas, root)
toolbar.update()
canvas._tkcanvas.pack(side=Tk.TOP, fill=Tk.BOTH, expand=1)
Tk.mainloop()
def main():
geo = geometer()
circle = geo.circle(1, [0, 0])
square = geo.rect(1, 1, [1, 1])
shape = geo.union(circle, square)
geo.plot(shape)
答案 0 :(得分:0)
联合应该是x和y的函数,而不是A和B,它们已经是局部变量(参数)。所以假设工会应该更喜欢这个:
def union(self, A, B):
return lambda x, y: np.minimum(A(x, y), B(x, y))
另外,我不确定geometer
类实际上是什么。看起来你并没有使用一切都是方法的事实 - 你有一堆实例方法采用self
参数,但我看不到任何使用{{1}的方法},self
没有任何分配。只需将所有内容都带出课堂并进入全局功能,您就可以轻松逃脱。您还可以考虑使用@staticmethod实现其中一些作为静态方法 - 请参阅the documentation