폴리라인의 면적을 계산하시나요?

폴리라인의 면적을 계산하시나요?

안녕하세요 티저 여러분.

폴리라인으로 둘러싸인 영역을 계산하는 패키지/해킹이 있습니까? 예를 들어 다음과 같습니다.

\draw (p1) to (p2) to (p3) to cycle;

여기서 점은 정점입니다. 다각형은 볼록하지 않을 수 있습니다.

채우기 알고리즘을 개선/수정하여 해당 영역의 값(사용된 단위)을 반환할 수 있다고 생각합니다. 하지만 저는 기술적인 전문 지식이 없고 어쩌면 이미 답이 있을 수도 있습니다.

감사합니다.

추신: 해당 영역이 단순히 경계를 따라 통합된 것임을 추가하도록 편집되었습니다.

$$ \oint x dy $$

그래서 계산하기가 매우 쉽습니다. 물론 나는 사변형에만 관심이 있는 것이 아니라 꼭지점이 많은 폴리라인에 관심이 있어서 수작업 계산이 짜증날 정도로 길어집니다.

답변1

Ti를 이용한 신발끈 공식 적용케이z 라이브러리 math. @Thruston이 지정한 링크의 복잡한 애플리케이션을 예로 들어보겠습니다.

\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}

여기에 이미지 설명을 입력하세요

답변2

이는 사용자 영역에서 수행하기가 너무 어렵지 않아야 합니다. TikZ 팀을 기다리는 동안 여기에 간단한 내용이 있습니다.신발끈 알고리즘일반에서 완료메타포스트. 로 컴파일 하거나 로 mpost조정합니다 .lualatexluamplib

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.

예제 그림에서는 이를 오각형에 적용합니다.

여기에 이미지 설명을 입력하세요

내가 보여주려고 노력한 것처럼 이것은 약 6개의 시그니처를 제공합니다. 무화과. 일반 MP의 스케일링된 산술을 사용하여 정확도를 높이는데, 이보다 훨씬 더 큰 것에 적용하면 산술 오버플로가 발생합니다. 그러나 다음과 같이 컴파일하면 mpost -numbersystem double정확한 답을 얻을 수 있고 오버플로 가능성도 줄어듭니다.

여기에 이미지 설명을 입력하세요

관련 정보