Menghitung luas dalam polyline?
Halo sesama pecinta tik.
Apakah ada paket / retasan untuk menghitung area yang tertutup dalam polyline yaitu misalnya untuk sesuatu seperti ini
\draw (p1) to (p2) to (p3) to cycle;
dimana titik-titiknya adalah simpul. Poligon tidak boleh cembung.
Saya akan membayangkan bahwa algoritma pengisian dapat ditingkatkan / dimodifikasi untuk mengembalikan nilai area (dalam unit yang digunakan). Tapi saya tidak punya keahlian teknis dan mungkin sudah ada jawabannya.
Terima kasih.
PS: diedit untuk menambahkan bahwa area tersebut hanyalah integral sepanjang batas
$$ \oint x dy $$
jadi sangat mudah untuk dihitung. Tentu saya tidak tertarik dengan segiempat saja tetapi polyline dengan banyak simpul sehingga perhitungan tangan menjadi sangat panjang.
Jawaban
Penerapan rumus Tali Sepatu menggunakan pustaka Ti k z math. Sebagai contoh, aplikasi kompleks di tautan yang ditentukan oleh @Thruston diambil.
\documentclass[margin=3mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{math}
\usepackage{tkz-euclide}
\tikzmath{
\x1 = 3; \y1 =4;
\x2 = 5; \y2 =11;
\x3 = 12; \y3 =8;
\x4 = 9; \y4 =5;
\x5 = 5; \y5 =6;
\Det = (\x1*\y2) + (\x2*\y3) + (\x3*\y4) + (\x4*\y5) + (\x5*\y1)-
(\x2*\y1) - (\x3*\y2) - (\x4*\y3) - (\x5*\y4) - (\x1*\y5);
\Area = abs (\Det / 2);
}
\begin{document}
\begin{tikzpicture}
\tkzInit[xmax=13,ymax=12,xmin=0,ymin=0]
\tkzGrid
\tkzAxeXY
\draw[fill=gray!30](\x1,\y1)--(\x2,\y2)--(\x3,\y3)--(\x4,\y4)--(\x5,\y5)--cycle;
\tkzText [below](6.5,-1){$A = \Area$} ;
\end{tikzpicture}
\end{document}
Ini seharusnya tidak terlalu sulit untuk dilakukan di lahan pengguna - saat Anda menunggu tim TikZ, berikut adalah algoritma Tali Sepatu sederhana yang dilakukan di Metapost biasa . Kompilasi dengan mpostatau adaptasi lualatexdengan luamplib.
prologues := 3;
outputtemplate := "%j%c.%{outputformat}";
vardef shoelace_area(expr p) =
for i=1 upto length p:
+ 1/2 xpart point i of p * ypart point i+1 of p
- 1/2 ypart point i of p * xpart point i+1 of p
endfor
enddef;
beginfig(1);
path t; t = for i=0 upto 4: 100 dir 72i -- endfor cycle;
draw origin -- point 1 of t; label.lft(btex $R=100$ etex, 1/2 point 1 of t);
draw t; dotlabel.rt(decimal shoelace_area(t), origin) withcolor 2/3 red;
draw thelabel(btex $\displaystyle A = {5\over4}R^2\sqrt{5+\sqrt5\over2}$ etex, origin) scaled 3/4 shifted 30 down;
draw thelabel(btex $A = 2.37764129 R^2$ etex, origin) scaled 3/4 shifted 54 down;
endfig;
end.
Gambar contoh menerapkannya pada segi lima:
Seperti yang saya coba tunjukkan, ini memberi Anda sekitar 6 sig. ara. akurasi menggunakan aritmatika berskala MP biasa, dan jika Anda menerapkannya pada sesuatu yang jauh lebih besar dari ini, Anda akan mendapatkan luapan aritmatika. Tetapi jika Anda mengkompilasi dengan mpost -numbersystem doubleAnda mendapatkan jawaban yang akurat dan kemungkinan melimpah lebih sedikit: