-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathproyek.py
96 lines (81 loc) · 4.4 KB
/
proyek.py
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.art3d import Poly3DCollection
import numpy as np
def transformasi_affine(titik, matrix, translation):
transformed_titik = np.dot(titik, matrix.T) + translation
return transformed_titik
def matrix_skala(scaling_factors):
return np.diag(scaling_factors)
# Titik-titik kubus
titik = np.array([
[0, 0, 0],
[1, 0, 0],
[1, 1, 0],
[0, 1, 0],
[0, 0, 1],
[1, 0, 1],
[1, 1, 1],
[0, 1, 1]
])
# Matriks translasi affine
affine_matrix_translation = np.eye(3)
translation_vector = np.array([2, 2, 0])#menentukan translasi
# Melakukan translasi affine
titik_translasi = transformasi_affine(titik, affine_matrix_translation, translation_vector)
# Matriks skala affine
scaling_factors = np.array([2, 1, 1])#menentukan skala
affine_matrix_scale = matrix_skala(scaling_factors)
# Melakukan transformasi skala
titik_skala = transformasi_affine(titik, affine_matrix_scale, np.zeros(3))
# Membuat plot 3D
fig, ax = plt.subplots(1, 2, figsize=(12, 5), subplot_kw={'projection': '3d'})
# Plot untuk translasi sebelum
ax[0].set_title('Objek Sebelum Translasi')
transformasi_sebelum_translation = Poly3DCollection([[titik[0], titik[1], titik[2], titik[3]],
[titik[4], titik[5], titik[6], titik[7]],
[titik[0], titik[1], titik[5], titik[4]],
[titik[2], titik[3], titik[7], titik[6]],
[titik[1], titik[2], titik[6], titik[5]],
[titik[0], titik[3], titik[7], titik[4]]],
facecolors='cyan', linewidths=1, edgecolors='r', alpha=0.5, label='Sebelum Translasi')
ax[0].add_collection3d(transformasi_sebelum_translation)
# Plot untuk skala sebelum
ax[1].set_title('Objek Sebelum Skala')
transformasi_sebelum_scale = Poly3DCollection([[titik[0], titik[1], titik[2], titik[3]],
[titik[4], titik[5], titik[6], titik[7]],
[titik[0], titik[1], titik[5], titik[4]],
[titik[2], titik[3], titik[7], titik[6]],
[titik[1], titik[2], titik[6], titik[5]],
[titik[0], titik[3], titik[7], titik[4]]],
facecolors='cyan', linewidths=1, edgecolors='r', alpha=0.5, label='Sebelum Skala')
ax[1].add_collection3d(transformasi_sebelum_scale)
# Plot untuk translasi setelah
transformasi_sesudah_translasi = Poly3DCollection([[titik_translasi[0], titik_translasi[1], titik_translasi[2], titik_translasi[3]],
[titik_translasi[4], titik_translasi[5], titik_translasi[6], titik_translasi[7]],
[titik_translasi[0], titik_translasi[1], titik_translasi[5], titik_translasi[4]],
[titik_translasi[2], titik_translasi[3], titik_translasi[7], titik_translasi[6]],
[titik_translasi[1], titik_translasi[2], titik_translasi[6], titik_translasi[5]],
[titik_translasi[0], titik_translasi[3], titik_translasi[7], titik_translasi[4]]],
facecolors='magenta', linewidths=1, edgecolors='b', alpha=0.5, label='Setelah Translasi')
ax[0].add_collection3d(transformasi_sesudah_translasi)
ax[0].set_title('Transformasi Translasi') # Tambahkan judul
# Plot untuk skala setelah
transformasi_sesudah_skala = Poly3DCollection([[titik_skala[0], titik_skala[1], titik_skala[2], titik_skala[3]],
[titik_skala[4], titik_skala[5], titik_skala[6], titik_skala[7]],
[titik_skala[0], titik_skala[1], titik_skala[5], titik_skala[4]],
[titik_skala[2], titik_skala[3], titik_skala[7], titik_skala[6]],
[titik_skala[1], titik_skala[2], titik_skala[6], titik_skala[5]],
[titik_skala[0], titik_skala[3], titik_skala[7], titik_skala[4]]],
facecolors='yellow', linewidths=1, edgecolors='g', alpha=0.5, label='Setelah Skala')
ax[1].add_collection3d(transformasi_sesudah_skala)
ax[1].set_title('Transformasi Skala') # Tambahkan judul
# Menampilkan legenda
ax[0].legend()
ax[1].legend()
# Menyesuaikan batas sumbu
for a in ax:
a.set_xlim([0, 5])
a.set_ylim([0, 5])
a.set_zlim([0, 5])
# Menampilkan plot
plt.show()