Jump to content

Shoelace formula for polygonal area: Difference between revisions

no edit summary
No edit summary
Line 730:
print(shoeArea(p))-- 30 </lang>
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}}==
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.