Maple computations
>
area := proc(ngon)
local i,s,nvs;
nvs := nops(ngon);
s := 0;
for i from 2 to nvs-1 do
s := s+ linalg[det]( array(1..2,1..2,[
[op(expand(ngon[ (i-1) mod nvs +1]- ngon[1])) ],
[op(expand(ngon[i mod nvs +1]-ngon[1])) ] ])) od;
1/2*s end:
> ngon := [[0,0],[1,0],[a,b],[c,d]];
> area(ngon);
> nvs := nops(ngon);
>
mids := [seq(1/2*(ngon[(i-1) mod nvs + 1] +ngon[i mod nvs + 1]),i=1..nops(ngon))]:
segs := [seq([(mids[(i-1) mod nvs + 1] ,ngon[(i+1) mod nvs + 1])],i=1..nops(ngon))]:
>
insect := proc(seg1,seg2)
local sol,t,r,eqns;
eqns := expand(t*seg1[1]+(1-t)*seg1[2]- r*seg2[1]-(1-r)*seg2[2]);
sol := solve({eqns[1],eqns[2]},{t,r}):
subs(sol,expand(t*seg1[1]+(1-t)*seg1[2])) end:
>
getnewgon := proc(ngon)
local i,nvs,mids,segs;
nvs := nops(ngon);
mids := [seq(1/2*(ngon[(i-1) mod nvs + 1] +ngon[i mod nvs + 1]),i=1..nops(ngon))];
segs := [seq([(mids[(i-1) mod nvs + 1] ,ngon[(i+1) mod nvs + 1])],i=1..nops(ngon))]:
map(simplify, [seq(insect([mids[(i-1) mod nvs +1],ngon[(i+1) mod nvs +1]], [ngon[i mod nvs +1],mids[(i+2) mod nvs +1]]),i=1..nvs)]);
end:
> newgon:= getnewgon(ngon);
> f := unapply(simplify(area(newgon)/area(ngon)),a,b,c,d);
>
plgon:=(a1,b1,c1,d1) ->
plots[display]([
plots[polygonplot](subs({a=a1,b=b1,c=c1,d=d1},newgon),
color=turquoise),
plots[polygonplot](subs({a=a1,b=b1,c=c1,d=d1}, ngon),color=yellow),
>
plot(subs({a=a1,b=b1,c=c1,d=d1},segs),color=red,thickness=3),
plots[textplot]([.5,-.5,cat(`ratio =`,convert(evalf(f(a1,b1,c1,d1),5),string))])],scaling=constrained):
>
> plgon(2,3,0,1);
>
>
The analysis assuming that 3 of the points are [0,1], [0,0], and [1,0] and the 4th is [a,b] with a> 0, b > 0, and a+b > 1.
> factor(numer(f(a,b, 0,1)));
> top := collect(numer(f(a,b, 0,1)),a);
> bottom:=factor(collect(expand(denom(f(a,b,0,1))),a));
> lefthand := factor(bottom-5*top) ;
This is always >= 0 with equality when or and a+b >1, a > 0, b > 0.
> pl1 := plot( 3/2-x/2,x=0..3 ,color=blue,thickness=2):
> pl2 := plot( 2*x-1,x=2/3..3 ,color=blue,thickness=2):
>
> righthand:= factor(6*top-bottom) ;
>
The factor is always positive for a > 0, b > 0, and :
=
>
>
>
> = > 0 except when b = 2
But in that case (b = 2), = = > 0
Note that when b = 1, a = 0, the quadrangle collapses to a triangle and the factor is 0.
The factor is also always positive for a > 0, b > 0, 1 < a+b:
=
> = > 0.
Note that when a = 1 and b = 0, we get the other degenerate case where the ratio becomes 1/6.
> pl1 := plot( 3/2-x/2,x=0..3 ,color=blue,thickness=2):
> pl2 := plot( 2*x-1,x=2/3..3 ,color=blue,thickness=2):
> frame := (x,y) -> plots[display]([plgon(x,y,0,1) ,pl1,pl2],view=[0..3,-.5..3],scaling=constrained):
>
path := proc(lst,t0,t1,kind,m)
local x,y,p,n;
>
#lst := [[0,0],[1,0],[1,1],[2,3]];
#kind := linear;
#t0:=0:
#t1:=1:
n:=nops(lst)-1:
#m:=10:
> readlib(spline);
>
x :=unapply(spline( [seq(t0+j*(t1-t0)/n,j=0..n)],
[seq(lst[i][1],i=1..n+1)],t,kind),t):
>
y :=unapply(spline( [seq(t0+j*(t1-t0)/n,j=0..n)],
[seq(lst[i][2],i=1..n+1)],t,kind),t):
> p := [x,y]:
>
plots[display](
[seq(frame(op(p(t0 +i/(m-1)*(t1-t0)))),i=0..m-1)],
scaling=constrained,insequence=true); end:
> path([[2/3,1/3],[2/3,1/3],[1,1],[1,1],[3,0],[1,0],[1,0],[2,3],[2,3],[1,1],[1,1],[0,3/2],[0,1],[0,1],[2,3],[2/3,1/3]],0,1,linear,75);
> frame(2,3/2-1/2*2);
>