Path2D로 표시되는 일부 경로가 있습니다. 경로는 서로 연결된 여러 CubicCurve2D 또는 Line2D 세그먼트로 구성됩니다. 나는 길의 시작에서 끝까지 길이를 계산하거나 얻고 싶다. 어떻게 계산할 수 있습니까? 가능한가? the API documentation을 확인했지만 유용한 방법을 찾을 수 없습니다.Java에서 Path2D의 길이를 계산하는 방법은 무엇입니까?
답변
이 항목의 이전 question에 비추어 볼 때 Computing the Arc Length of Cubic Bezier Curves 문서는 통찰력을 제공 할 수 있습니다. 편의상 JScience Polynomial
클래스를 살펴볼 수 있습니다. 또한이 approximation을 기반으로 동일 article을 기반으로 도울 수 있습니다.
getPathIterator()
을 사용하여 시작하여 경로 요소를 가져옵니다. 경로에 SEG_MOVETO
및 SEG_LINETO
요소 만있는 경우 길이를 계산하기 쉽습니다. SEG_LINETO
에 대해 sqrt ((X1-X2)^2 + (Y1-Y2)^2)를 합산합니다. 여기서 점 (X1, Y1)은 이전 종점이고 (X2, Y2)는 currentSegment (double []).
또한 SEG_QUADTO
또는 SEG_CUBICTO
요소가 포함되어 있으면 지금 당장 계산할 필요가없는 복잡한 수식이 필요합니다 (미적분을 요구할 수 있음).
기능을 사용할 수 있습니다. public PathIterator getPathIterator (AffineTransform at, double flatness);
이것은 SEG_MOVETO, SEG_LINETO 및 SEG_CLOSE 세그먼트 만 포함하는 'flattenend'이터레이터를 제공합니다. 내 영어에 대한 모든 유감의
먼저 ...
나는이 오래된 주제지만 아마도 그것은 누군가를 위해 유용 알고있다. 내가이 만든하는 CubicCurve에 대한하지만 QuadCurve에 대한되지 않습니다 :
public double CurveLength (QuadCurve curve){
double xini = curve.getStartX();
double yini = curve.getStartY();
double xpoint = curve.getControlX();
double ypoint = curve.getControlY();
double xfin = curve.getEndX();
double yfin = curve.getEndY();
double ax = xini-(2*xpoint)+xfin;
double ay = yini-(2*ypoint)+yfin;
double bx = (2*xpoint)-(2*xini);
double by = (2*ypoint)-(2*yini);
double A = 4*((ax*ax)+(ay*ay));
double B = 4*((ax*bx)+(ay*by));
double C = (bx*bx)+(by*by);
double Sabc = 2*(Math.sqrt(A+B+C));
double A2 = Math.sqrt(A);
double A32 = 2*A*A2;
double C2 = 2*(Math.sqrt(C));
double BA = B/A2;
double length = ((A32*Sabc) + (A2*B*(Sabc-C2)) + (((4*C*A)-(B*B))*Math.log(((2*A2)+BA+Sabc)/(BA+C2))))/(4*A32);
return length;
}
- 1. 문자열의 픽셀 길이를 계산하는 방법은 무엇입니까?
- 2. Java에서 CRC8을 계산하는 방법
- 3. Java에서 hashCode()를 계산하는 방법
- 4. Java에서 가비지 컬렉터에 대한 오브젝트 적합성을 계산하는 방법은 무엇입니까?
- 5. java에서 데이터베이스의 선택된 값에 대한 합계를 계산하는 방법은 무엇입니까?
- 6. HTML5 : 다중 입력란에서 파일 길이를 계산하는 방법
- 7. 하위 뷰를 포함하여 HorizontalScrollView 길이를 계산하는 방법
- 8. 개체 내부의 요소를 계산하는 방법은 무엇입니까?
- 9. 조각화를 계산하는 방법은 무엇입니까?
- 10. 실시간으로 계산하는 방법은 무엇입니까?
- 11. 이미지의 픽셀 길이를 계산하십시오.
- 12. fft에서 ifft를 계산하는 방법은 무엇입니까?
- 13. 파일 크기를 계산하는 방법은 무엇입니까?
- 14. 열거 횟수를 계산하는 방법은 무엇입니까?
- 15. BigInterger를 소수에서 계산하는 방법은 무엇입니까?
- 16. cellID에서 거리를 계산하는 방법은 무엇입니까?
- 17. 메쉬의 법선을 계산하는 방법은 무엇입니까?
- 18. 스크롤바에서 뷰포트를 계산하는 방법은 무엇입니까?
- 19. OpenGL에서 FPS를 계산하는 방법은 무엇입니까?
- 20. 필드의 laplacian을 계산하는 방법은 무엇입니까?
- 21. 테이블의 메모리를 계산하는 방법은 무엇입니까?
- 22. 복리 이자율을 계산하는 방법은 무엇입니까?
- 23. 파일에서 자릿수를 계산하는 방법은 무엇입니까?
- 24. 중복 영역을 계산하는 방법은 무엇입니까?
- 25. AVCaptureDevice의 focusPointOfInterest를 계산하는 방법은 무엇입니까?
- 26. C++에서 UCS-2 문자열의 길이와 크기를 계산하는 방법은 무엇입니까?
- 27. GWT 2.3의 지수를 계산하는 방법은 무엇입니까?
- 28. MySQL에서 숫자 값 (INT)의 필드 길이를 예측/계산하는 방법은 무엇입니까?
- 29. Java에서 트위닝하는 방법은 무엇입니까?
- 30. 개체의 주소에서 hashCode()를 계산하는 방법은 무엇입니까?
+1 계산을 단순화하기 위해 유형을 확인하기 위해. 처음에는 미적분 방법으로 '다항식'클래스를 선호했지만 아크 길이 적분에는 닫힌 폼 솔루션이 없습니다. :-( – trashgod