Poleg osnovne implementacije, sem razmislil še o parih drugih možnostih.
Namesto matričnega in elementarnega množenja, lahko uporabimo tudi vektorsko množenje, vendar moramo pred tem podatke postaviti v tridimenzionalni prostor. To storimo z vrstico Pn=[Pn,zeros(vel,1)];
, ki vekotrju Pn doda še stolpec ničel. Sedaj lahko ploščino trikotnikov direktno izračunamo kot trikotniki=sqrt(sum(abs(cross(Pn,Rn,2)).^2,2));
. Vendar pa ta metoda ne prinese nobene dodatne pedagoške ali izvedbene vrednosti k rešitvi
V Matlabu se da brez prevelikih težav tudi implementirati naprednejšo metdod za določanje točke v poligonu, npr. to
ly=Pn(:,2);
dy=Rn(:,2);
Xv=repmat(X,vel,1);
Xy=Xv(:,2);
gor=ly<=Xy & dy>Xy;
dol=dy<=Xy & ly>Xy;
nd=Rn-Pn;
nx=(Xv-Pn)*mat;
vsota=sum(nd.*nx,2);
ovojev=(vsota>0 & gor) - (vsota <0 &dol) ;
%pogledamo število ovojev, če je enako 0 smo zunaj drugače smo notri. Če je več kot 1, smo v notranjosti kompleksnega polinoma
odg=(sum(ovojev)!=0);
Koda sicer deluje primerljivo hitro kot primer ostali metodi, ter deluje tudi za konkavne in celo samo presekajoče poligone (v tem primeru vrne vrednost večjo od 1). Vendar pa je pedagoško težko razložljiva in tudi ne izkoristi dejstva da smo že izračunali predznake trikotnikov. V splošnem pa je zaradi svojega razširjenega področja uporabnosti verjetno bolj primerna.
Za konec velja morda omeniti še rahlo strojniški prstop z uporabo vgrajenih funkcij. Matlab pozna funkciji polyarea
in inpolygon
, ki opravita natačno zahtevano nalogo. Vendar poleg tega, da ti funkciji nimata nobene pedagoške vrednosti, tudi tečeta zelo počasi. Uporabni sta kvečemu zaradi svoje priročnosti.