Geçenlerde kardeşim tarayıcı tabanlı bir oyun oynarken birşey dikkatimi çekti. Oyunda bulunduğunuz koordinatlara göre bir etki alanına sahip oluyorsunuz ve o etki alanının dışarısında bulunan kaynaklara müdahale edemiyorsunuz. Ben de vakit geçmesi için bu olayı python ile örnekledim. Yazdığım bu basit sınıf, düz mantık olarak, iki nokta arasındaki en yakın yolu, noktanın çemberin alanına dahil olup olmadığını ve 2 çemberin kesişip kesişmediği hakkında sonuç üretiyor. Mantık tahmin edebileceğiniz gibi çok basit: x ve y koordinatları arasındaki mutlak fark ve pisagor.
-
#!/usr/bin/python
-
#-*- coding:utf-8 -*-
-
from math import sqrt
-
class Mesafe:
-
def __init__(self,mx,my,mr,qx,qy,qr):
-
try:
-
self.mx = int(mx)
-
self.my = int(my)
-
self.qx = int(qx)
-
self.qy = int(qy)
-
self.mr = int(mr)
-
self.qr = int(qr)
-
except:
-
print "Hatalı işlem. Argümanları tam verin ve sayısal değerler kullanın"
-
-
def __pisagor(self):
-
fxk = pow(abs(self.mx-self.qx),2)
-
fyk = pow(abs(self.my-self.qy),2)
-
return sqrt(fxk+fyk)
-
-
def EnYakinYol(self):
-
if self.mx <> self.qx and self.my <> self.qy:
-
return self.__pisagor()
-
elif self.mx == self.qx:
-
return abs(self.my-self.qy)
-
elif self.my == self.qy:
-
return abs(self.mx-self.qx)
-
-
def EtkiAlani(self):
-
try:
-
if self.mr == 0:
-
raise ValueError("Yarıçap 0 olamaz")
-
except ValueError:
-
raise
-
else:
-
if (self.mr-self.__pisagor()) > 0:
-
return True
-
else:
-
return False
-
-
def CemberKesisme(self):
-
try:
-
if self.mr == 0 or self.qr == 0:
-
raise ValueError("Yarıçap(lar) 0 olamaz")
-
except ValueError:
-
raise
-
else:
-
if self.__pisagor() <= (self.mr+self.qr):
-
return True
-
else:
-
return False
Tags: mesafe, Python
Posted in Python · Temmuz 5th, 2009 · Comments (0)