我有一个由三个元素F={v0,v1,v2}组成的frozenset和一组由两个元素组成的frozenset,即e={e0,e1,e2,…},其中每个ei=frozenset({x,y})。我想找到以下集合
S={frozenset({a,b}):E中的a,b,a和b各自包含F的不同元素,并且a和b共享一个元素}。
例如:a包含v0,b包含v1,a和b都包含v7(某个不在F中的任意值)意味着frozenset({a,b})在S中。
我可以用一行集合的理解来做这件事吗?
就上下文而言,我正试图编写一个脚本来完善八面体三角测量,如图所示:
我想要的集合S将是绿色文本。
到目前为止,我有以下内容:
import pylab as plt
import numpy as np
from mpl_toolkits.mplot3d.art3d import Poly3DCollection
### Initial octahedron ###
Vertices = [ [0,0,1], [1,0,0], [0,1,0], [-1,0,0], [0,-1,0], [0,0,-1] ]
Edges = { frozenset({0,1}), frozenset({0,2}), frozenset({0,3}), frozenset({0,4}),
frozenset({1,2}), frozenset({2,3}), frozenset({3,4}), frozenset({1,4}),
frozenset({1,5}), frozenset({2,5}), frozenset({3,5}), frozenset({4,5}) }
Faces = { frozenset({0,1,2}), frozenset({0,2,3}), frozenset({0,3,4}), frozenset({0,1,4}),
frozenset({1,2,5}), frozenset({2,3,5}), frozenset({3,4,5}), frozenset({1,4,5}) }
### New set of vertices, edges, and faces ###
counter=5
newVertices=set()
newEdges=set()
newFaces=set()
for edge in Edges: # adding elements of newVertices and newEdges
counter=counter+1
newVertices.add(counter)
for vertex in edge:
newEdges.add(frozenset({vertex,counter}))