我正在使用 Open3D 在 Python 中可视化点云。本质上,我想做的是以编程方式向点云添加另一个点,然后实时渲染它。
这是我到目前为止所拥有的。我找不到任何解决方案。
在下面的代码中,我展示了一种可能的解决方案,但它并不有效。第一个窗口关闭后,点将被添加并打开一个新窗口。这不是我想要的。我希望它能够动态显示新点,而无需再次关闭和打开。以及创建一个新变量的事实,我认为在处理越来越大的数据集时可能会出现问题
import open3d as o3d
import numpy as np
#Create two random points
randomPoints = np.random.rand(2, 3)
pointSet = o3d.geometry.PointCloud()
pointSet.points = o3d.utility.Vector3dVector(randomPoints)
#Visualize the two random points
o3d.visualization.draw_geometries([pointSet])
#Here I want to add more points to the pointSet
#This solution does not work effective
#Create another random set
p1 = np.random.rand(3, 3)
p2 = np.concatenate((pointSet.points, p1), axis=0)
pointSet2 = o3d.geometry.PointCloud()
pointSet2.points = o3d.utility.Vector3dVector(p2)
o3d.visualization.draw_geometries([pointSet2])
Run Code Online (Sandbox Code Playgroud)
有没有可能解决这个问题?
如果没有,我还可以查看哪些其他库能够实时渲染新的传入点。
我正在使用 ThreeJS 创建点云。我想根据云中的每个点的位置为其指定特定的颜色。如何为几何体中的每个顶点分配特定颜色并在必要时更改顶点的颜色?
geometry = new THREE.Geometry();
for (i = 0; i < particleCount; i++) {
var vertex = new THREE.Vector3();
vertex.x = Math.random() * 2000 - 1000;
vertex.y = Math.random() * 2000 - 1000;
vertex.z = Math.random() * 2000 - 1000;
geometry.vertices.push(vertex);
}
colors = [0xff0000, 0x0000FF, 0x00FF00, 0x000000]
size = 0.5
material = new THREE.PointsMaterial({
size: size,
color: colors[0]
});
particles = new THREE.Points(geometry, material);
scene.add(particles);
Run Code Online (Sandbox Code Playgroud) 当使用 Pandas TA 计算 EMA 时,我发现 EMA 与交易视图中的 EMA 不匹配。
考虑 EMA 为 200 的任何股票。接下来,计算具有任意数量的蜡烛的最后一个 EMA。如果我们仅通过 200 根蜡烛,则与交易视图上的相同时间戳相比,该特定时间戳的值是不准确的。通过 500 根蜡烛可以显着提高准确性。通过 1000 根蜡烛,精度相对准确。
我意识到的另一件事是,EMA 长度越大,获得准确结果所需的蜡烛就越多。例如,如果仅使用 200 根左右的蜡烛,则使用 50 的 EMA 会产生相对准确的结果。
我的问题是,如果您使用的蜡烛数量与 EMA 长度相同,甚至是 EMA 长度的两倍,那么与交易视图相比,为什么 EMA 值不准确?为什么它必须大得多?
如果有人想测试它,我使用了带有 ADAUSDT 的币安交易所。
这是我的 EMA 计算
import pandas as pd
import pandas_ta as ta
def calculate_TA_values(closes, date):
close_series = pd.Series(closes)
ema = ta.ema(close_series, 200)
print(ema)
print(date)
Run Code Online (Sandbox Code Playgroud) 本质上我想做的是有一个函数,每当调用它时,它都会在单独的线程上执行。我不想调用 thread.start(),因为这会立即执行它。
我有以下 python 脚本。我的 GUI 使用 PyQt5。每当按下按钮时,我想在单独的线程上执行长时间运行的函数。这是代码:
from PyQt5 import QtWidgets, uic
import time
def longRunningFunction():
time.sleep(10)
app = QtWidgets.QApplication([])
dlg = uic.loadUi("app.ui")
dlg.button_to_click.clicked.connect(longRunningFunction)
dlg.show()
app.exec()
Run Code Online (Sandbox Code Playgroud)
当我向程序添加线程时,该函数在 thread.start() 上执行。下面是添加了线程的代码:
from PyQt5 import QtWidgets, uic
import time
import threading
def longRunningFunction():
time.sleep(10)
app = QtWidgets.QApplication([])
dlg = uic.loadUi("app.ui")
dlg.button_to_click.clicked.connect(longRunningFunction)
thread = threading.Thread(target=longRunningFunction)
thread.start()
dlg.show()
app.exec()
Run Code Online (Sandbox Code Playgroud)
使该函数在调用时始终使用单独的线程,以便 GUI 不会冻结的最佳方法是什么?该函数在运行时将被连续调用,每分钟多次。这个函数也将比示例复杂得多。它将使用其他自定义 python 脚本中的多种方法,并且还运行一个 websocket 连接。