Menghitung luas dalam polyline?

Sep 03 2020

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

5 ferahfeza Sep 03 2020 at 05:44

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}

5 Thruston Sep 03 2020 at 04:46

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: