- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使 3D 等高线图变暗或具有阴影,以使其“看起来”为 3D。我正在使用 matplotlib,主要是因为绘图质量很高,我更愿意继续使用它。
最终,我想要一个单一或平坦的彩色表面,在 matplotlib 风格的绘图中转换阴影。
我正在使用 scipy 进行一些插值和 skimage 以及行进立方体算法来生成轮廓。然后最后使用它来创建和着色多边形集合。
import numpy as np
from skimage import measure
from scipy.interpolate import griddata
import matplotlib as mpl
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d.art3d import Poly3DCollection
from matplotlib.colors import LightSource
# Generate an grid to inerpolate to
X, Y, Z = np.meshgrid(0.0:1.0:50j, 0.0:1.0:50j, 0.0:1.0:50j)
# Interpolate (coor and phi are the numerical grid and scalar values)
F = griddata(coor, phi, (X, Y, Z), method='nearest')
# Make the contour, marching cubes
marchCubeSpace = 1.0 / 50.0
verts, faces, normals, values = measure.marching_cubes_lewiner(F, 0.5, spacing=(marchCubeSpace, marchCubeSpace, marchCubeSpace))
# Create Ploy3D
mesh = Poly3DCollection(verts[faces], alpha=1.0)
# An attempt to get some sort of height data.
facearray = np.array([np.array((np.sum(verts[face[:], 0]/3), np.sum(verts[face[:], 1]/3), np.sum(verts[face[:], 2]/3))) for face in faces])
# light source, ultimately I want to use not `reds` but just a red for all faces.
ls = LightSource(azdeg=45.0, altdeg=90.0)
rgb = ls.blend_hsv(rgb=ls.shade(facearray, plt.cm.Reds), intensity=ls.shade_normals(normals, fraction=0.25))
mesh.set_facecolor(rgb[:, 0])
# Plot
fig = plt.figure()
ax = fig.add_subplot(0, 0, 0, projection='3d')
ax.add_collection3d(mesh)
最佳答案
好的,所以我有一个可以接受的解决方案。如果您需要更多帮助,请给我留言,我很乐意帮助任何人解决这个问题。请注意,下面的代码需要您的数据集中的 coor
和 phi
,因此如果您不为其提供 3D 标量场,则此代码将不会运行。
import numpy as np
from skimage import measure
from scipy.interpolate import griddata
import matplotlib as mpl
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d.art3d import Poly3DCollection
from matplotlib.colors import LightSource
# Generate an grid to inerpolate to
X, Y, Z = np.meshgrid(0.0:1.0:50j, 0.0:1.0:50j, 0.0:1.0:50j)
# Interpolate (coor and phi are the numerical grid and scalar values)
F = griddata(coor, phi, (X, Y, Z), method='nearest')
# Make the contour, marching cubes
marchCubeSpace = 1.0 / 50.0
verts, faces, normals, values = measure.marching_cubes_lewiner(F, 0.5, spacing=(marchCubeSpace, marchCubeSpace, marchCubeSpace))
# Create Ploy3D and set up a light source
mesh = Poly3DCollection(verts[faces], alpha=1.0)
ls = LightSource(azdeg=225.0, altdeg=45.0)
# First change - normals are per vertex, so I made it per face.
normalsarray = np.array([np.array((np.sum(normals[face[:], 0]/3), np.sum(normals[face[:], 1]/3), np.sum(normals[face[:], 2]/3))/np.sqrt(np.sum(normals[face[:], 0]/3)**2 + np.sum(normals[face[:], 1]/3)**2 + np.sum(normals[face[:], 2]/3)**2)) for face in faces])
# Next this is more asthetic, but it prevents the shadows of the image being too dark. (linear interpolation to correct)
min = np.min(ls.shade_normals(normalsarray, fraction=1.0)) # min shade value
max = np.max(ls.shade_normals(normalsarray, fraction=1.0)) # max shade value
diff = max-min
newMin = 0.3
newMax = 0.95
newdiff = newMax-newMin
# Using a constant color, put in desired RGB values here.
colourRGB = np.array((255.0/255.0, 54.0/255.0, 57/255.0, 1.0))
# The correct shading for shadows are now applied. Use the face normals and light orientation to generate a shading value and apply to the RGB colors for each face.
rgbNew = np.array([colourRGB*(newMin + newdiff*((shade-min)/diff)) for shade in ls.shade_normals(normalsarray, fraction=1.0)])
# Apply color to face
mesh.set_facecolor(rgbNew)
# Plot
fig = plt.figure()
ax = fig.add_subplot(0, 0, 0, projection='3d')
ax.add_collection3d(mesh)
关于python - 如何对 Poly3DCollection 进行光照和着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56864378/
我正在尝试在客户端/前端上对图像进行多边形剪辑。一旦我获得积分,是否有办法吸引客户(即无需往返客户)? 据我所知,canvas 只能剪切矩形。也许有一种我不知道的方法?有没有我可以使用的轻量级 Can
我正在尝试使用 shapeless 创建一个可以采用余积的 poly2 函数: case class IndexedItem( item1: Item1, item2: Item2, it
是否可以使用 Poly/ML 构建共享库? 我希望能够创建一个 C Poly/ML 库的 API,并从不同的编程语言(例如 Python)调用/加载它。有人尝试这样做吗? 我知道这可以在 OCaml
我通过 js 模拟了标签区域悬停,并为每个区域创建了 js 函数。因此,正如您所看到的,矩形区域( bool 什维克主义)被绘制成 incide,而保利区域(乌托邦社会主义)只有一个轮廓。 var h
R 中的函数 poly() 用于生成正交向量,有助于解释系数的重要性。但是,我不认为将其用于预测的意义。在我看来,以下两个模型(model_1 和 model_2)应该产生相同的预测。 q=1:11
我已经通读了手册页?poly(我承认我没有完全理解),并且还阅读了书Introduction to Statistical Learning中该函数的描述。 。 我目前的理解是,调用poly(hors
到目前为止,我一直在使用 Poly/ML 进行几个所有源代码文件都在同一目录中的小项目。要构建这些项目,我所要做的就是在 REPL 中运行以下命令: > PolyML.make "Main"; 但现在
在 Poly/ML 中,可以通过以下方式获取全局值的名称: map #1 ((#allVal PolyML.globalNameSpace) ()); 可以使用#allStruct 类似地获得顶级结构
我正在尝试编译一串源代码并使用 Poly/ML 打印解析树。以下代码可以编译,但解析树为空: fun main () = let val stream = TextIO.ope
到目前为止,我一直在使用 Poly/ML 进行几个所有源代码文件都在同一目录中的小项目。要构建这些项目,我所要做的就是在 REPL 中运行以下命令: > PolyML.make "Main"; 但现在
这个问题已经有答案了: Fitting polynomial model to data in R (5 个回答) 已关闭10 年前。 我正在尝试使用 lm(poly) 获得某些点的多项式回归,但对它
我想将多项式系数附加到 data.frame,如下所示: df1 % dplyr::mutate( Linear = poly(x = Y, degree = 3, raw = TR
如何在 Cocos2D 框架中绘制填充多边形? 下面的代码绘制多边形但没有抗锯齿。我应该更改什么? void ccFillPoly( CGPoint *poli, int points, BOOL c
我在 svg 上绘制了人体部位图并将其集成到我的 html 中: .st0{stroke:#010101;stroke-width:0.4;stroke-miterlimit:10;}
我正在尝试了解如何使用 scikit-learn(或其他模块)在 R 中复制 poly() 函数。 例如,假设我在 R 中有一个向量: a <- c(1:10) 我想生成三次多项式: polynomi
我有一个关于公式和用户定义函数的问题: 情况1: clotting 这是coef=的地方添加属性。但还要注意,它会检查调用是否来自“poly”函数本身。由于您的函数名为“xpoly”但返回一个“
如果我有一个像这样的空间线对象: require(sp) x <- c(18.25721, 18.25763,18.25808,18.25846,18.25864,18.25886,18.25892,
我注意到大多数 3d 游戏/渲染环境将实体表示为(通常是三角形)3d 多边形的网格。但是一些示例,例如 Second Life , 或 PovRay使用由一组 3d 图元(立方体、球体、圆锥体、环面等
我正在使用 GeoDjango 查找多边形内的所有点,但它似乎使用边界(NMW、NME、SME、SMW)来查找点。因此,它会返回原始形状之外的结果。 polygon = Polygon((18.382
来自Tiltbrush section的多边形动画无法在 Linux 中为我渲染(在 Chrome 或 Firefox 下):https://poly.google.com/tiltbrush (但是
我是一名优秀的程序员,十分优秀!