##A triangle class ##ideas from S. Keene, Object Oriented Programming in Common Lisp #library(methods) setClass("triangle", representation(a="numeric", b="numeric", c="numeric")) tr1 <- new("triangle", a=3, b=4, c=5) ##Law of cosines: a^2 = b^2+c^2-2*b*c*cos(A) threesidestoangle <- function(a=a, b=b, c=c) acos((b^2+c^2-a^2)/(2*b*c)) angleA <- function(object) threesidestoangle(a=object@a,b=object@b, c=object@c) angleB <- function(object) threesidestoangle(object@b, object@c, object@a) angleC <- function(object) threesidestoangle(object@c, object@a, object@b) if( ! isGeneric("area") ) setGeneric("area", function(object) standardGeneric("area")) setMethod("area", signature(object="triangle"), function(object) object@a*object@b*sin(angleC(object))/2 ) area(tr1) #what should: angleA(tr1)+angleB(tr1)+ angleC(tr1) #be equal to?