gpt4 book ai didi

python - 根据不等式方程填充图像的区域

转载 作者:行者123 更新时间:2023-12-01 01:45:32 26 4
gpt4 key购买 nike

我想使用 python 中的 matplotlib 在 2D 绘图上绘制填充区域。隐式区域定义为,

def f(x,y):
return sqrt(2*x*y)-x-y

我想向现有图像添加由两个不等式定义的 XY 平面中的填充区域,

sqrt(x**2+y**2)-2<=f(x,y) && f(x,y)>=1

为了清楚起见,我想绘制一个由满足上述不等式的所有 (x,y) 值定义的区域。我尝试让它与 pyplot.contour 一起工作,但我无法让它工作。正确的做法是什么?

编辑:下面是我想要的输出的示例图像: enter image description here

这是一张行星根据其与恒星的位置在其环上转换阴影的图像。我在 Mathematica 中创建了该图像,现在我需要在 python 中创建等效的图像。我已经有了行星和光环的图,我正在尝试添加阴影。

阴影由两个不等式定义,位于 XY 平面内。为了方便起见,我上面给出的方程被高度简化;我不需要数学帮助,只需在图中实现它。

在 python 版本中,我还希望阴影成为位于 XY 平面中的填充区域。

最佳答案

直接使用等值线图会出现问题,因为该函数仅在四个象限中的两个中定义。因此,建议首先将不等式转换为网格上的二进制数组。

要绘制此图,您可以使用 imshow 图。

import numpy as np
import matplotlib.pyplot as plt

f = lambda x,y : np.sqrt(2*x*y)-x-y
g = lambda x,y : np.sqrt(x**2+y**2)-2

d = np.linspace(-2,2,2000)
x,y = np.meshgrid(d,d)

im = plt.imshow( ((g(x,y)<=f(x,y)) & (f(x,y)<=1)).astype(int) ,
extent=(x.min(),x.max(),y.min(),y.max()),origin="lower", cmap="Greys")

plt.show()

enter image description here

您同样可以使用轮廓图;在这里,为了使轮廓接近二进制值,使用接近 1 的两个级别可能是有意义的。它还需要定义一个全黑颜色图。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors

f = lambda x,y : np.sqrt(2*x*y)-x-y
g = lambda x,y : np.sqrt(x**2+y**2)-2

d = np.linspace(-2,2,2000)
x,y = np.meshgrid(d,d)
z = ((g(x,y)<=f(x,y)) & (f(x,y)<=1)).astype(int)

cmap = matplotlib.colors.ListedColormap(["k","k"])
plt.contourf(x,y,z, [0.99999, 1.00001], cmap=cmap)

plt.show()

关于python - 根据不等式方程填充图像的区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51388809/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com