1votos

Dibujar un triángulo rectángulo en Python

por josejuan hace 6 años

Por darle gracia al problema, rotamos primero el triángulo A radianes XD XD (vale para cualquier triángulo)

Dibujar un triángulo rectángulo isósceles.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import math 
import sys 
 
# rotate: (p)oint, (c)enter, (a)ngle 
def R(p, c, a): 
        dx, dy = p[0] - c[0], p[1] - c[1] 
        ca, sa = math.cos(a), math.sin(a) 
        return (c[0] + dx * ca - dy * sa, c[1] + dx * sa + dy * ca) 
 
# check inside: triangle (v)ertex, (p)oint 
def I(v, p): 
        S = lambda a, b, c: (a[0] - c[0]) * (b[1] - c[1]) - (b[0] - c[0]) * (a[1] - c[1]) > 0 
        q = S(v[0], v[1], p) 
        return q == S(v[1], v[2], p) and q == S(v[2], v[0], p) 
 
# draw rotated triangle: triangle (v)ertex, (a)ngle 
def T(v, a): 
        c = (sum([p[0] for p in v]) / 3.0, sum([p[1] for p in v]) / 3.0) 
        V = [R(p, c, a) for p in v] 
        X, Y = [p[0] for p in V], [p[1] for p in V] 
        x1, y1, x2, y2 = min(X), min(Y), max(X), max(Y) 
        for y in range(int(y2 - y1) + 2): 
                for x in range(int(x2 - x1) + 2): 
                        if I(V, (x1 + x - 0.5, y1 + y - 0.5)): 
                                sys.stdout.write('X') 
                        else: 
                                sys.stdout.write('.') 
                sys.stdout.write('\n') 
 
 
 
 
 
 
# Por ejemplo 
T([(0, 0), (15, 0), (0, 15)], math.pi / 20) 
 
................... 
...XXXX............ 
...XXXXXXXXXX...... 
...XXXXXXXXXXXXXXX. 
...XXXXXXXXXXXXXX.. 
...XXXXXXXXXXXX.... 
..XXXXXXXXXXXX..... 
..XXXXXXXXXX....... 
..XXXXXXXXX........ 
..XXXXXXXX......... 
..XXXXXX........... 
..XXXXX............ 
..XXXX............. 
.XXX............... 
.XX................ 
................... 

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.