- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试为旋转的立方体制作动画。为此,我使用 Poly3DCollection 并使用 FuncAnimation 对其进行动画处理:
anim = animation.FuncAnimation(fig, visualize_rotation, fargs=[collection],
init_func=partial(init_func, ax, collection),
frames=360, interval=1000 / 30)
但它渲染每一帧的速度非常慢,所以我每秒只能得到几帧。为了修复它,我尝试添加参数 blit=True
,希望它能提高渲染速度,但这样我就看不到立方体了。
我确保 visualize_rotation
返回 [collection]
的艺术家列表,这是 blit=True
所要求的,如 this question 中所述, 但立方体仍然不可见。
那么,在这种情况下,如何使用 blit
标志,同时能够在动画期间看到立方体?
完整代码:
import math
from functools import partial
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import animation
from mpl_toolkits.mplot3d.art3d import Poly3DCollection
def visualize_rotation(frame, collection):
angle = math.radians(2) * frame
points = np.array([[-1, -1, -1],
[1, -1, -1],
[1, 1, -1],
[-1, 1, -1],
[-1, -1, 1],
[1, -1, 1],
[1, 1, 1],
[-1, 1, 1]])
Z = np.zeros((8, 3))
for i in range(8):
Z[i, :] = [
math.cos(angle) * points[i, 0] - math.sin(angle) * points[i, 1],
math.sin(angle) * points[i, 0] + math.cos(angle) * points[i, 1],
points[i, 2]
]
Z = 10.0 * Z
# list of sides' polygons of figure
vertices = [[Z[0], Z[1], Z[2], Z[3]],
[Z[4], Z[5], Z[6], Z[7]],
[Z[0], Z[1], Z[5], Z[4]],
[Z[2], Z[3], Z[7], Z[6]],
[Z[1], Z[2], Z[6], Z[5]],
[Z[4], Z[7], Z[3], Z[0]]]
# plot sides
collection.set_verts(vertices)
print(frame)
return [collection]
def init_func(ax, collection):
ax.set_xlim(-15, 15)
ax.set_ylim(-15, 15)
ax.set_zlim(-15, 15)
ax.set_box_aspect(np.ptp([ax.get_xlim(), ax.get_ylim(), ax.get_zlim()], axis=1))
return [collection]
def animate_rotation():
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d', proj_type='persp')
collection = Poly3DCollection([[np.zeros(3)]], facecolors='white',
linewidths=1, edgecolors='r', alpha=0.8)
ax.add_collection3d(collection)
# noinspection PyUnusedLocal
anim = animation.FuncAnimation(fig, visualize_rotation, fargs=[collection],
init_func=partial(init_func, ax, collection),
frames=360, interval=1000 / 30, blit=True)
plt.show()
我添加了每秒帧数的计算并绘制了它:
timestamps = []
def visualize_rotation(frame, collection):
...
# plot sides
collection.set_verts(vertices)
global timestamps
timestamps.append(time.time())
print(round(1 / np.mean(np.diff(timestamps[-1000:])), 1))
return [collection]
def animate_rotation():
...
plt.plot(np.diff(timestamps))
plt.ylim([0, 0.1])
plt.show()
这是当窗口为正常大小且绘图速度较慢时发生的情况(以秒为单位的时间与帧数):
绘图的开头显示了窗口大小的调整。在第二种情况下,只有 2 帧被丢弃(大约 50 和 150),总体帧速率约为 30 fps,符合要求。当窗口正常大小时,我正在寻找相同类型的行为。当我打开 blit
时,情节看起来不错,但问题是立方体不可见。
最佳答案
我为您找到了一个单线修复:在更新顶点后添加 do_3d_projection。
...
# plot sides
collection.set_verts(vertices)
collection.do_3d_projection(collection.axes.get_figure().canvas.get_renderer())
print(frame)
return [collection]
当blit=True时,底层代码没有调用它,这可能是一个错误。
此外,还会弹出另一个错误;当动画在 blit=True 模式下重复时,最后一帧以某种方式被保留。要解决此问题,请在您的 init_func 中添加 ax.clear() 和 ax.add_collection3d():
def init_func(ax, collection):
ax.clear()
ax.add_collection3d(collection)
ax.set_xlim(-15, 15)
ax.set_ylim(-15, 15)
...
关于python - 如何使用带 blit=True 的 FuncAnimation 为 Poly3DCollection 设置动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66113220/
我正在尝试在客户端/前端上对图像进行多边形剪辑。一旦我获得积分,是否有办法吸引客户(即无需往返客户)? 据我所知,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 (但是
我是一名优秀的程序员,十分优秀!