Shoelace formula for polygonal area: Difference between revisions
Content added Content deleted
No edit summary |
|||
Line 730: | Line 730: | ||
print(shoeArea(p))-- 30 </lang> |
print(shoeArea(p))-- 30 </lang> |
||
both version handle special cases of less than 3 point as 0 area result. |
both version handle special cases of less than 3 point as 0 area result. |
||
=={{header|Maple}}== |
|||
<lang Maple> |
|||
with(ArrayTools): |
|||
module Point() |
|||
option object; |
|||
local x := 0; |
|||
local y := 0; |
|||
export getX::static := proc(self::Point, $) |
|||
return self:-x; |
|||
end proc; |
|||
export getY::static := proc(self::Point, $) |
|||
return self:-y |
|||
end proc; |
|||
export ModuleApply::static := proc() |
|||
Object(Point, _passed); |
|||
end proc; |
|||
export ModuleCopy::static := proc(new::Point, proto::Point, X, Y, $) |
|||
new:-x := X; |
|||
new:-y := Y; |
|||
end proc; |
|||
export ModulePrint::static := proc(self::Point) |
|||
return cat("(", self:-x, ",", self:-y, ")"); |
|||
end proc; |
|||
end module: |
|||
module Polygon() |
|||
option object; |
|||
local vertices := Array([Point(0,0)]); |
|||
export getVertices::static := proc(self::Polygon) |
|||
return self:-vertices; |
|||
end proc; |
|||
export area::static := proc(self::Polygon) |
|||
local i, N := ArrayNumElems(self:-vertices); |
|||
local total := getX(self:-vertices[N]) * getY(self:-vertices[1]) - getX(self:-vertices[1]) * getY(self:-vertices[N]); |
|||
total += map(`+`, seq(getX(self:-vertices[i]) * getY(self:-vertices[i+1]), i = 1..(N-1))) - map(`+`, seq(getX(self:-vertices[i+1]) * getY(self:-vertices[i]), i = 1..(N-1))); |
|||
return abs(total / 2); |
|||
end proc; |
|||
export ModuleApply::static := proc() |
|||
Object(Polygon, _passed); |
|||
end proc; |
|||
export ModuleCopy::Static := proc(new::Polygon, proto::Polygon, Ps, $) |
|||
new:-vertices := Ps; |
|||
end proc; |
|||
export ModulePrint::static := proc(self::Polygon) |
|||
return self:-vertices; |
|||
end proc; |
|||
end module: |
|||
P1 := Polygon(Array([Point(3,4), Point(5,11), Point(12,8), Point(9,5), Point(5,6)])): |
|||
area(P1); |
|||
</lang> |
|||
{{out}}<pre> |
|||
30 |
|||
</pre> |
|||
=={{header|Mathematica}}== |
=={{header|Mathematica}}== |