Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从vispy中的单击点选择最近的标记?_Python_Simulation_Vispy - Fatal编程技术网

Python 如何从vispy中的单击点选择最近的标记?

Python 如何从vispy中的单击点选择最近的标记?,python,simulation,vispy,Python,Simulation,Vispy,在库中,我有一个以标记形式显示的点列表,我想更改距离单击点最近的点的颜色(或仅获取其索引) 我可以通过event.pos获取单击点的像素,但我需要它的实际坐标来与其他点进行比较(或者获取其他标记的像素点以与事件位置进行比较) 我有这个代码来获取最近的点索引。它接受数组和点的输入(单击一个) def获取最近的索引(位置,p0): 计数=0 col=[(1,1,1,0.5)表示位置中的i] dist=math.inf ind=0 对于范围内的i(len(pos)): d=(pos[i][0]-p0[

在库中,我有一个以标记形式显示的点列表,我想更改距离单击点最近的点的颜色(或仅获取其索引)

我可以通过event.pos获取单击点的像素,但我需要它的实际坐标来与其他点进行比较(或者获取其他标记的像素点以与事件位置进行比较)

我有这个代码来获取最近的点索引。它接受数组和点的输入(单击一个)

def获取最近的索引(位置,p0):
计数=0
col=[(1,1,1,0.5)表示位置中的i]
dist=math.inf
ind=0
对于范围内的i(len(pos)):
d=(pos[i][0]-p0[0])**2+(pos[i][1]-p0[1])**2

如果d[4.44178173e+04-1.60156369e+04 0.00000000 E+00 1.00000000 E+00]
远未靠近点。

将像素转换为本地坐标时,您使用的是transform.map,它根据提供地图坐标。您需要使用的是反向贴图

您可以尝试这样做:

tf = view.scene.transform
point = tf.imap(event.pos)
print(str(event.pos) + "--->"+str(point))
同样,如果您需要转换特定的标记集,这将是一种更好的方法

ct = markers.node_transform(markers.root_node)
point = ct.imap(event.pos)

markers.node\u transform(markers.root\u node)
view.scene.transform
现在都是一样的,我可以得到最近的点。在旁注“print([int(x)表示tf.map(p)]”)中,pos中的每个p都会打印出像
[-1746,-342,0,1]
这样的负片点,所以map和imap并不完全相反?超出可见画布范围的像素根据其位置被表示为负片或超大像素点。所以,这可能就是你得到的。
tf = view.scene.transform
point = tf.imap(event.pos)
print(str(event.pos) + "--->"+str(point))
ct = markers.node_transform(markers.root_node)
point = ct.imap(event.pos)