如何使用Vispy绘制多个矩形?坐标设置问题求解
如何在Vispy中绘制多个独立矩形
你尝试用单个Polygon对象添加两组矩形坐标来绘制两个矩形,但得到怪异形状的原因是:单个Polygon会将所有传入的坐标点按顺序连接成一个连续多边形,而非多个独立图形。
解决方法
方法1:创建多个Polygon实例
为每个矩形单独创建Polygon对象,传入各自的顶点坐标组:
from vispy import app import sys from vispy.scene import SceneCanvas from vispy.scene.visuals import Polygon from vispy.color import Color white = Color("#ecf0f1") gray = Color("#121212") red = Color("#e74c3c") blue = Color("#2980b9") canvas = SceneCanvas(keys='interactive', title='Multiple Rectangles', show=True) v = canvas.central_widget.add_view() v.bgcolor = gray v.camera = 'panzoom' # 第一个矩形坐标 cx1, cy1 = (0.2, 0.2) halfx, halfy = (0.1, 0.1) rect1_coords = [(cx1 - halfx, cy1 - halfy), (cx1 + halfx, cy1 - halfy), (cx1 + halfx, cy1 + halfy), (cx1 - halfx, cy1 + halfy)] # 第二个矩形坐标(偏移后) cx2, cy2 = (0.6, 0.2) rect2_coords = [(cx2 - halfx, cy2 - halfy), (cx2 + halfx, cy2 - halfy), (cx2 + halfx, cy2 + halfy), (cx2 - halfx, cy2 + halfy)] # 分别创建独立的Polygon对象 poly1 = Polygon(rect1_coords, color=red, border_color=white, border_width=3, parent=v.scene) poly2 = Polygon(rect2_coords, color=blue, border_color=white, border_width=3, parent=v.scene) if __name__ == '__main__': if sys.flags.interactive != 1: app.run()
方法2:使用内置Rectangle组件(更简便)
Vispy提供了专门的Rectangle类,无需手动计算顶点,直接设置中心、宽高即可:
from vispy import app import sys from vispy.scene import SceneCanvas from vispy.scene.visuals import Rectangle from vispy.color import Color white = Color("#ecf0f1") gray = Color("#121212") red = Color("#e74c3c") blue = Color("#2980b9") canvas = SceneCanvas(keys='interactive', title='Multiple Rectangles', show=True) v = canvas.central_widget.add_view() v.bgcolor = gray v.camera = 'panzoom' # 第一个矩形:中心(0.2,0.2),宽0.2,高0.2 rect1 = Rectangle(center=(0.2, 0.2), width=0.2, height=0.2, color=red, border_color=white, border_width=3, parent=v.scene) # 第二个矩形:中心(0.6,0.2),尺寸与第一个一致 rect2 = Rectangle(center=(0.6, 0.2), width=0.2, height=0.2, color=blue, border_color=white, border_width=3, parent=v.scene) if __name__ == '__main__': if sys.flags.interactive != 1: app.run()
错误原因说明
你之前的代码将两组矩形的8个顶点全部传入同一个Polygon,Vispy会按顺序连接所有点(从第一个点到最后一个点,再闭合回起点),最终形成的是一个连接两个矩形的不规则图形,而非独立的两个矩形。
内容的提问来源于stack exchange,提问作者maynull
相关产品推荐
相关产品推荐

