无论如何,使用const axios = require("axios");
const moment = require("moment");
const { promisify } = require("util");
const orderbookQueue = [];
const orderbookUpdateTime = {};
async function requestOrderbook(pair) {
const response = await axios.post("https://api.kraken.com/0/public/Depth", {
pair
});
orderbookUpdateTime[pair] = +moment();
return response.data.result[pair];
}
async function getOrderbook(pair, currentTime) {
if (
orderbookUpdateTime[pair] &&
currentTime - orderbookUpdateTime[pair] > 60000
) {
const requestOrderbookAsync = promisify(requestOrderbook);
orderbookQueue.push(() => requestOrderbookAsync(pair));
// how to I return the result of requestOrderbookAsync when it has been called ?
}
return requestOrderbook(pair);
}
const queueExecutor = function queueExecutor() {
while (orderbookQueue.length) {
orderbookQueue[0]();
orderbookQueue.shift();
}
};
获取所有单纯形/三角形的某个点是Delaunay三角剖分的一部分吗?
我知道有scipy.spatial.Delaunay
函数,它只返回一个点是其中一部分的1个三角形,但我想得到它所属的所有三角形。
所以在这个例子中,当我为点6做find_simplex()
时,它只返回三角形2,但我希望它返回三角形1,2,3,4,10和9作为点6是所有这些三角形的一部分。
任何帮助将不胜感激!
答案 0 :(得分:1)
您不希望find_simplex
因为它是几何的,而不是拓扑的。也就是说,它将一个点视为一个位置而不是三角测量的一个组成部分:几乎所有点都只存在于一个单形中,因此它就是它报告的内容。
而是使用顶点数字。简单的回答是使用simplices
属性:
vert=6
[i for i,s in enumerate(d.simplices) if vert in s]
使用更多代码,可以使用vertex_to_simplex
和neighbors
属性更有效地进行搜索。
答案 1 :(得分:0)
您可以通过以下方式有效地获取给定顶点附近的所有单纯形:
def get_simplices(self, vertex):
"Find all simplices this `vertex` belongs to"
visited = set()
queue = [self.vertex_to_simplex[vertex]]
while queue:
simplex = queue.pop()
for i, s in enumerate(self.neighbors[simplex]):
if self.simplices[simplex][i] != vertex and s != -1 and s not in visited:
queue.append(s)
visited.add(simplex)
return np.array(list(visited))
示例:
import scipy.spatial
import numpy as np
np.random.seed(0)
points = np.random.rand(10, 2)
tri = scipy.spatial.Delaunay(points)
vertex = 2
simplices = get_simplices(tri, vertex)
# 0, 2, 5, 9, 11
neighbors = np.unique(tri.simplices[simplices].reshape(-1)])
# 0, 1, 2, 3, 7, 8
可视化:
import matplotlib.pyplot as plt
plt.triplot(points[:,0], points[:,1], tri.simplices)
plt.plot(points[neighbors,0], points[neighbors,1], 'or')
plt.plot(points[vertex,0], points[vertex,1], 'ob')
plt.show()