我有一个方形平面晶格,表示为NxN网格图。在Jung中是否有任何方法可以获得特定顶点的对称对(给定对称轴)。示例:8-> 0,5-> 3。 我的目标是获得不同的节点对。由于对(4,1),(4,7),(4,3)和(4,5)基本相同。 (1,3)与(3,7)等相同。也许某些算法可以在矩阵上执行,然后转换为图。
答案 0 :(得分:0)
一般图表并不特别适合这类事物,因为它们没有内置的行,列,轴对称等概念;他们全都是关于拓扑而不是几何。
如果你真的想要这样的东西,你应该创建一个具有你想要的操作的Graph的子类型,并创建一个匹配的实现,或者只是创建相应的矩阵(以及从矩阵位置到图节点的映射)而是对该矩阵进行操作。
答案 1 :(得分:0)
到目前为止,我能够编写一个算法,将矩阵旋转3次,并在固定索引处跟踪节点。可以使用节点的视觉坐标而不是索引为任何类型的Graph编写相同的内容。
fun rotateMatrix(matrix: List<IntArray>): List<IntArray> {/*---*/}
val reflections = mutableListOf<Pair<Number, Number>>()
(0..2).fold(mat) { a, b ->
val new = rotateMatrix(a)
mat.forEachIndexed { x, e ->
e.forEachIndexed { y, e2 ->
reflections.add(mat[x][y] to new[x][y])
}
}
new
}
结果是描述(0,2,8,6)是“相同”的关系; (1,5,3,7)是相同的。剩下要做的唯一事情是使用输出来确定哪些节点对应哪些反射兄弟。