繁体   English   中英

使用 3D function 的图形库

[英]using graphics library for 3D function


你好

我需要使用图形库来绘制 function
z=f(x,y)
什么时候:
z=cos(r) * 0.1 ^ -r

r = sqrt ( x^2 + y^2)

我尝试编写代码并得到一个错误,有人知道为什么吗?

from graphics import *
from math import *
def D3_graph(x,y,z,d):
    win = GraphWin("3D_graph",1000, 1000)
    win.setBackground(color_rgb(0,0,0))
    point =Circle(Point(500,500),300)
    for x_a in range(-7,7):
        sqrt_cul = sqrt((x-x_a)**2 + y**2)
        z=cos(sqrt_cul)*d**-(sqrt_cul)
        win.plot(x_a,y+z,"Blue") 
        win.plot(x_a,-y+z,"Blue")
    c.draw(win)
    win.getMouse()
    win.close()
D3_graph(300,300,100,0.1)

我相信您的项目中使用了graphics.py (不链接到非原始文件)。

一些明显的问题可能

  • 当x,y = 300; d = 0.1,则 d**-r 将是 0.1^-424,大于 1e+309,因此浮点溢出。 值的大小太大而无法绘制。
  • c.draw(win)但变量c之前未声明。

其他问题是

  • 我猜 graphics.py 是一个 2D plot 接口,不适用于 3D。 它只是用于教学和演示,而不是用于复杂的绘图。
  • [-300, 300] 中 x, y 的范围太大。 我认为 [-1.2, 1.2] 可能更好。

我个人更喜欢 matplotlib 工作区。 代码到 plot 这个图可以是(另见 matplotlib 3D 表面教程

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-1.15, 1.15, 300)
y = np.linspace(-1.15, 1.15, 300)
x, y = np.meshgrid(x, y)
r = np.sqrt(x**2 + y**2)
z = np.cos(r) * 0.1**-r

fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
surf = ax.plot_surface(x, y, z)
fig.show()

结果图可能是示例图

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM