@@ -17,6 +17,24 @@ variable "height" {
17
17
locals {
18
18
dx = var. second [0 ] - var. first [0 ]
19
19
dy = var. second [1 ] - var. first [1 ]
20
+
21
+ sorted = abs (local. dx ) < abs (local. dy ) ? [abs (local. dx ), abs (local. dy )] : [abs (local. dy ), abs (local. dx )]
22
+ gcd0 = local. sorted [0 ] == 0 ? [0 , 1 ] : local. sorted
23
+
24
+ # Do as many iterations as necessary.
25
+ gcd1 = local. gcd0 [0 ] == 0 ? local. gcd0 : [local . gcd0 [1 ] % local . gcd0 [0 ], local . gcd0 [0 ]]
26
+ gcd2 = local. gcd1 [0 ] == 0 ? local. gcd1 : [local . gcd1 [1 ] % local . gcd1 [0 ], local . gcd1 [0 ]]
27
+ gcd3 = local. gcd2 [0 ] == 0 ? local. gcd2 : [local . gcd2 [1 ] % local . gcd2 [0 ], local . gcd2 [0 ]]
28
+ gcd4 = local. gcd3 [0 ] == 0 ? local. gcd3 : [local . gcd3 [1 ] % local . gcd3 [0 ], local . gcd3 [0 ]]
29
+ gcd5 = local. gcd4 [0 ] == 0 ? local. gcd4 : [local . gcd4 [1 ] % local . gcd4 [0 ], local . gcd4 [0 ]]
30
+ gcd6 = local. gcd5 [0 ] == 0 ? local. gcd5 : [local . gcd5 [1 ] % local . gcd5 [0 ], local . gcd5 [0 ]]
31
+ gcd7 = local. gcd6 [0 ] == 0 ? local. gcd6 : [local . gcd6 [1 ] % local . gcd6 [0 ], local . gcd6 [0 ]]
32
+ gcd8 = local. gcd7 [0 ] == 0 ? local. gcd7 : [local . gcd7 [1 ] % local . gcd7 [0 ], local . gcd7 [0 ]]
33
+ gcd9 = local. gcd8 [0 ] == 0 ? local. gcd8 : [local . gcd8 [1 ] % local . gcd8 [0 ], local . gcd8 [0 ]]
34
+ gcd10 = local. gcd9 [0 ] == 0 ? local. gcd9 : [local . gcd9 [1 ] % local . gcd9 [0 ], local . gcd9 [0 ]]
35
+
36
+ # 10 iterations should cover numbers up to 55, which is more than the width/height
37
+ gcd = local. gcd10 [1 ]
20
38
}
21
39
22
40
output "nodes1" {
@@ -28,7 +46,7 @@ output "nodes1" {
28
46
29
47
output "nodes2" {
30
48
value = concat (
31
- [for i in range (max (var. width , var. height )) : [var . first [0 ] - i * local . dx , var . first [1 ] - i * local . dy ]],
32
- [for i in range (max (var. width , var. height )) : [var . second [0 ] + i * local . dx , var . second [1 ] + i * local . dy ]]
49
+ [for i in range (max (var. width , var. height )) : [var . first [0 ] - i * local . dx / local . gcd , var . first [1 ] - i * local . dy / local . gcd ]],
50
+ [for i in range (max (var. width , var. height )) : [var . second [0 ] + i * local . dx / local . gcd , var . second [1 ] + i * local . dy / local . gcd ]]
33
51
)
34
52
}
0 commit comments