2013-04-03 18 views
5

Basit bir dörtgen alanını hesaplayan bir hesap makinesi oluşturmaya çalışıyorum. Her dörtgenin iki üçgene ayrılabileceğini biliyorum ve ne olursa olsun alanı iki bölümden hesaplayabilmeliyim. Bunu matematikte yapabilirim, ancak bunu Python'a nasıl uygulayacağımı bilmiyorum.Dörtgen bir alanın hesaplamasını yapın

İşte benim dörtlü sınıf var:

class Quadrilateral(Shape): 
    def __init__(self, name): 
     # in clockwise order: angles[0], sides[0], angles[1], sides[1], ... 
     self.sides = [5] * 4 
     self.angles = [90] * 4 
     super().__init__(self, name) 

Şimdi neye ihtiyacım benim dörtgen alanını hesaplayan bir yöntem get_area() uygulamaktır, ama nasıl hiçbir fikrim yok.

Burada bir kağıt ve bir kalem ile yapacağını nasıl:

Area of a quadrilateral

Temelde sadece iki açıları ve üç tarafı alanı hesaplamak için bu tekniği kullanabilmek için bilmek gerekir, ama bunun için endişelenme. Şimdilik, tüm açıları ve her tarafı biliyorum, alanı nasıl hesaplayabilirim?

+2

açı ve yan boylarındaki yerine 2D noktaları kullanmanın daha iyi bir yaklaşım olabilir. Bir tarafı modifiye ederken ancak ilgili verileri ayarlamadığında geçersiz bir veri setiyle sonuçlanabilir. 2B noktaları kullanarak, ilişkiler (açı ve yan uzunluk) örtüktür. –

+0

müthiş bir resim için canlandır! – Gerrat

+1

@Gerrat Kazanmak için boya, yay! –

cevap

4

Sadece iki listelerinde doğrudan tarafı ve açıları erişmek sahip:

sides = [3, 5, 5, 4] ve angles = [90, 95, 75, 100] olarak örneğe göre, alan daha sonra
import math 

area1 = 0.5 * self.sides[0] * self.sides[1] * math.sin(math.radians(self.angles[1])) 
area2 = 0.5 * self.sides[2] * self.sides[3] * math.sin(math.radians(self.angles[3])) 
area = area1 + area2 

:

>>> import math 
>>> sides = [3, 5, 5, 4] 
>>> angles = [90, 95, 75, 100] 
>>> area1 = 0.5 * sides[0] * sides[1] * math.sin(math.radians(angles[1])) 
>>> area2 = 0.5 * sides[2] * sides[3] * math.sin(math.radians(angles[3])) 
>>> area1 + area2 
17.31953776581017 
+0

Evet, ben de öyle düşündüm ve denedim, ama gerçekten garip sonuçlar veriyor. Örneğinizde de, [3, 5, 5, 4] 've sadece 0.060806449423319364'lü alanların taraflarını düşünün? Mümkün değil. –

+4

Hayır. Math.sin, derece yerine radyan olarak hesaplar! – core1024

+0

@ core1024 Ahh, şimdi aptal hissediyorum, elbette ... Bunu nasıl değiştirebilirim? –

İlgili konular