我正在编写一个涉及使用Hilbert curve python模块的程序。Hilbert curve python模块的输出以列表的形式出现,或者以单点集的形式出现。我在分离列表以便使用matplotlib绘制它时遇到了麻烦。
下面是示例代码:
import numpy as np
from hilbertcurve.hilbertcurve import HilbertCurve
import regex as re
p=int(input("order of curve: "))
n=2
hilbert_curve = HilbertCurve(p,n)
totalpoints = 2**(p*n)
distances = list(range(totalpoints))
#distances = list(range(int(input("list the number of points"))))
points = hilbert_curve.points_from_distances(distances)
#This stuff below prints out all of the individual points
#for point, dist in zip(points, distances):
# print (f'point(h={dist}) = {point}')
#this prints out the array of all points generated by the program. Useful for debug
#print(points)
字符串
问题是,当使用matplotlib时,它不会将各个点分离成“点”,从而导致多个线性图而不是Hilbert曲线。
我还需要能够将它们分开,这样我就可以对各个点执行算术运算。这个库无限扩展曲线的长度,而不是在一个1x1的正方形中定义曲线应该如何表示。这很容易通过划分各个点来解决。
该产品的最终结果是能够确定希尔伯特曲线的起始点,而不是使其从0,0开始。第二个实现将在点查找脚本中,其中可以针对特定点检查希尔伯特曲线的生成点,以查看曲线是否通过它。因此,对于这两种实现,我需要能够操作单个点,而在当前列表形式中我不能。
我尝试使用np split()和str.split()
方法。str方法失败,因为这是一个列表,而不是一个字符串。np不工作,原因不明。
1条答案
按热度按时间3hvapo4f1#
这应该做你想要的,但如果你有数百万点(6位数)是非常低效的:
字符串
在这种情况下,我怀疑你的许多点彼此之间的距离会小于1px,所以你可以将你的点添加到kd树中(如果你的点是二维的,它们看起来是二维的,K将是2),并查询你的视口中的点(假设你已经放大了实际的曲线,而不仅仅是一个实心的点块,因为这就是希尔伯特曲线所做的(它是一个空间填充曲线))。
想象一下同样的场景,对于一个分形图案(希尔伯特曲线确实是),由于其递归性质,它有无限多个点。当显示器上的像素是微米级时,你不会绘制相隔纳米的点,因为它们不会是可分辨的。