У меня возникли проблемы с решением задачи, в которой я должен вычислить площадь. Я не знаю точно, как вычислить площадь и потом реализовать это в программе. Я посмотрел, и площадь, вероятно, рассчитывается по формуле: A = ½·d1·d2·sin π, где d1, d2 — диагонали, пересекающиеся под углом π. Но как реализовать это в программе?
Мой код выглядит так:
class Poly p where
area_q :: p -> Float
data Quad = MQuad{
qP1 :: Point,
qP2 :: Point,
qP3 :: Point,
qP4 :: Point}
deriving Show
**Problem**
instance Poly Quad where
area_q (Quad (Point x1 y1) (Point x2 y2) (Point x3 y3) (Point x4 y4)) = ((sqrt(x3-x1)^2*(y3-y1)^2)*(sqrt(x4-x2)^2*(y4-y2)^2)*sin(pi))/2
Ну я так и реализовал, но когда использую свои примеры, результат 0, хотя площадь не равна 0 (для моих примеров). Формула неверна или я неправильно ее реализовал?
Я ценю помощь и объяснение, спасибо заранее!
@Dogbert Они используют π как переменную, а не константу.
@rogerobi Поскольку π является такой важной константой, она обычно не используется в качестве переменной. θ чаще используется как переменная, представляющая угол.
@chepner Да, они используют π как переменную. Но они используют pi как константу. (Упс!)
Упс действительно с моей стороны!
Ты пишешь
sin(pi)
Который имитирует вашу формулу. Но в вашем описании формулы вы говорите, что π — это угол пересечения, тогда как в коде pi — это 3.1415927 совершенно независимо от формы четырехугольника.
Кроме того, вы пишете
sqrt(x3-x1)^2*(y3-y1)^2
Что соответствует математическому выражению (√(x3 - x1))2(y3 - y1)2, но правильная формула для расстояния √((x3 - x1)2 + (y3 - y1 )2).
Хорошо! теперь понял, спасибо большое))
sin pi
это0
google.com/search?q=sin+pi