-
Notifications
You must be signed in to change notification settings - Fork 48
Expand file tree
/
Copy pathBasitVektorIslemleri.py
More file actions
218 lines (164 loc) · 8.42 KB
/
BasitVektorIslemleri.py
File metadata and controls
218 lines (164 loc) · 8.42 KB
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
import time
from os import system
import math
class BasitVektorIslemleri():
__hataMesaji = ""
__islemYazilari = {
1: "Bir Vektorün normunu hesaplama",
2: "Bir Vektorün normalizasyonunu bulma",
3: "İki vektörün noktasal çarpımını bulma",
4: "Bir vektörün sıfır vektör olup olmadığını bulma",
5: "İki vektörün ortogonal olup olmadığını bulma",
6: "İki Vektör arasındaki açıyı bulma"
}
__vektorBilgileri = {}
def __init__(self):
self.menu()
def menu(self):
while True:
print("İşlem Menusu".center(40, "-"), end="\n\n")
for anahtar, deger in self.__islemYazilari.items():
print(f"{anahtar}) {deger}")
try:
self.__hataMesaji = "Geçerli bir işlem numarası girilmedi"
secenek = int(input("\n\nYapmak İstediğiniz İşlemin Numarasını Giriniz :"))
if not secenek in range(1, len(self.__islemYazilari)+1):
raise Exception
if secenek == 1:#Bir Vektorün normunu hesaplama
self.vektorAlma()
sonuc = self.vektorNormuHesaplama()
print(f"{sonuc[0]} adlı {sonuc[1]} değerli vektörün normu {sonuc[2]} dir.")
elif secenek == 2:# Bir Vektorün normalizasyonunu bulma
self.vektorAlma()
sonuc = self.vektorNormalizasyonunuBulma()
print(f"{sonuc[0][0]} adlı {sonuc[0][1]} değerli vektörün normu {sonuc[0][2]}\nnormalizasyon sonucu {sonuc[1]}'dir.")
elif secenek == 3:#İki vektörün noktasal çarpımını bulma
self.vektorAlma()
print("İkinci vektörü giriniz")
self.vektorAlma()
self.noktasalCarpim()
elif secenek == 4:#Bir vektörün sıfır vektör olup olmadığını bulma
self.vektorAlma()
self.sifirVektorMu()
elif secenek == 5:#İki vektörün ortogonal olup olmadığını bulma
self.vektorAlma()
print("İkinci vektörü giriniz")
self.vektorAlma()
self.ortogonalMi()
elif secenek == 6:#İki Vektör arasındaki açıyı bulma
self.vektorAlma()
print("İkinci vektörü giriniz")
self.vektorAlma()
self.aciBulma()
except:
print(f"Hata Mesajı =>\n{self.__hataMesaji}")
finally:
durum = input("Yeni bir işlem yapmak için e/E tuşuna basınız : ")
if durum == "e" or durum == "E":
system("cls")
self.__vektorBilgileri = {}#yeni bir işlem için eski vektör bilgileri siliniyor.
else:
break
def vektorAlma(self):
vektorAd = input(
"Kullanacağınız vektörün adını giriniz(Örneğin; u, v ...) :")
if vektorAd == "":
self.__hataMesaji = "Geçerli Bir Ad girilmedi"
raise Exception
print("Sayı dışında bir veri girişi olana kadar vektör için değer girebilirsiniz")
bilesenler = []
sayac = 1
while sayac:
try:
bilesenler.append(int(input(f"{sayac}. deger : ")))
sayac += 1
except:
break
if len(bilesenler) == 0:
self.__hataMesaji = "Vektor için bir değer girilmedi.."
raise Exception
self.__vektorBilgileri[vektorAd] = bilesenler
bilesenler = []
system('cls') # windowsda konsolu temizlemek için kullanılır
print(f"Girdiğiniz {vektorAd} adlı vektorün değeri {self.__vektorBilgileri[vektorAd]}'dir ")
print("Bu vektor -> {} <- boyutlu bir uzayda bir noktaya karşılık gelmektedir.".format(len(self.__vektorBilgileri[vektorAd])))
def vektorNormuHesaplama(self,vektörIndeks=0):
gecici = self.__vektorBilgileri.items()
# Sözlük listeye çevrildi ve ilk elemanı alında.
anahtar, deger = list(gecici)[vektörIndeks]
sonuc = 0
for eleman in deger:
sonuc += (eleman)**2
sonuc = sonuc**0.5
return anahtar, deger, sonuc
def vektorNormalizasyonunuBulma(self):
sonuc = self.vektorNormuHesaplama()
gecici = self.__vektorBilgileri.items()
anahtar, deger = list(gecici)[0]
normalizasyonluVektor = []
for eleman in deger:
normalizasyonluVektor.append(eleman / sonuc[2])
return sonuc, normalizasyonluVektor
def noktasalCarpim(self):
gecici = list(self.__vektorBilgileri.items())
# Sözlük listeye çevrildi ve ilk elemanı alındı.
vektor1Ad, vektor1Deger = gecici[0]
vektor2Ad, vektor2Deger = gecici[1]
sonuc = 0
if len(vektor2Deger) == len(vektor1Deger):
for i in range(len(vektor1Deger)):
sonuc += vektor1Deger[i]*vektor2Deger[i]
print(f"{vektor1Ad} adlı {vektor1Deger} içerikli vektör ile {vektor2Ad} adlı {vektor2Deger} içerikli iki vektörün noktasal çarpımının sonucu => {sonuc}")
else:
print("Lütfen iki vektörün uzunluğu aynı olsun.")
def sifirVektorMu(self):
gecici = list(self.__vektorBilgileri.items())
# Sözlük listeye çevrildi ve ilk elemanı alındı.
vektor1Ad, vektor1Deger = gecici[0]
vektor2Ad, vektor2Deger = gecici[0]
sonuc = 0
for i in range(len(vektor1Deger)):
sonuc += vektor1Deger[i]*vektor2Deger[i]
if sonuc==0:
print(f"{vektor1Ad} adlı {vektor1Deger} içerikli vektörün kendisi ile olan noktasal çarpımı sonucu=>{sonuc}\nolduğundan bir sıfır vektördür.")
else:
print(f"{vektor1Ad} adlı {vektor1Deger} içerikli vektörün kendisi ile olan noktasal çarpımı sonucu=>{sonuc}\nolduğundan bir sıfır vektör DEĞİLDİR.")
def ortogonalMi(self):
gecici = list(self.__vektorBilgileri.items())
# Sözlük listeye çevrildi ve ilk elemanı alındı.
vektor1Ad, vektor1Deger = gecici[0]
vektor2Ad, vektor2Deger = gecici[1]
sonuc = 0
if len(vektor2Deger) == len(vektor1Deger):
for i in range(len(vektor1Deger)):
sonuc += vektor1Deger[i]*vektor2Deger[i]
print(f"{vektor1Ad} adlı {vektor1Deger} içerikli vektör ile {vektor2Ad} adlı {vektor2Deger} içerikli iki vektörün noktasal çarpımının sonucu => {sonuc}")
if sonuc == 0:
print("olduğundan bu iki vektör ortogonaldir.")
else:
print("olduğundan bu iki vektör ortogonal DEĞİLDİR.")
else:
print("Lütfen iki vektörün uzunluğu aynı olsun.")
def aciBulma(self):
norm1 = self.vektorNormuHesaplama(0)
norm2 = self.vektorNormuHesaplama(1)
#noktasal(skaler) çarpım yapılıyor
gecici = list(self.__vektorBilgileri.items())
vektor1Ad, vektor1Deger = gecici[0]
vektor2Ad, vektor2Deger = gecici[1]
skalerSonuc = 0
if len(vektor2Deger) == len(vektor1Deger):
for i in range(len(vektor1Deger)):
skalerSonuc += vektor1Deger[i]*vektor2Deger[i]
else:
self.__hataMesaji = "Lütfen iki vektörün uzunluğu aynı olsun."
raise Exception
#####################################
cosAci = skalerSonuc/(norm1[2]*norm2[2])
aci = round(math.degrees(math.acos(cosAci)))
print(f"{vektor1Ad} adlı {vektor1Deger} içerikli vektör ile {vektor2Ad} adlı {vektor2Deger} içerikli iki vektör arasındaki açı => {aci} derecedir.")
########################################################################################################################
if __name__ == "__main__":
bvi = BasitVektorIslemleri()
print("Uygulama Kapatılıyor...Bekleyiniz...")
time.sleep(3)