>  기사  >  Java  >  Java의 회전된 좌표 평면에 데이터와 텍스트를 올바르게 플롯하는 방법은 무엇입니까?

Java의 회전된 좌표 평면에 데이터와 텍스트를 올바르게 플롯하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-06 11:47:03236검색

How to Correctly Plot Data and Text on a Rotated Coordinate Plane in Java?

Java에서 데이터 및 텍스트에 대한 좌표 평면 회전: 플로팅 문제 해결

Java에서 좌표 평면을 회전하고 데이터와 레이블을 올바르게 플로팅 몇 가지 주요 문제를 해결해야 합니다. 이 문서에서는 두 가지 일반적인 문제에 대한 솔루션을 제공합니다.

  1. 왼쪽 위 모서리를 원점으로 하고 y 값이 아래쪽으로 내려가는 데이터 포인트 그리기
  2. 틱 표시에 대한 레이블을 그리지 못함 y축

솔루션 개요

이러한 문제를 해결하기 위해 제공된 코드를 다음과 같이 수정했습니다.

1. DataPanel.java

<code class="java">import java.awt.*;
import java.awt.geom.AffineTransform;
import javax.swing.*;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.*;

class DataPanel extends JPanel {
    // ...

    @Override
    protected void paintComponent(Graphics g) {// Override paintComponent() method.
        super.paintComponent(g);
        // ...
        // Invert the y-axis.
        AffineTransform at = g2d.getTransform();//save the graphics context's transform
        g2d.translate(leftStartPlotWindow, blueTop);//translate origin to bottom-left corner of blue rectangle
        g2d.scale(1, -1);//invert the y-axis
        // ...
        // Restore the transform for conventional rendering.
        g2d.setTransform(at);//restore the transform for conventional rendering
        // ...
    }

    // ...
}</code>

2. DataGUI.java

이 파일은 변경할 필요가 없습니다.

설명

  • 좌표면 회전의 핵심은 AffineTransform을 사용합니다. 그래픽 컨텍스트는 원점을 파란색 직사각형의 왼쪽 하단 모서리로 변환한 다음 y축의 크기를 -1만큼 조정하여 효과적으로 반전시키는 방식으로 변환됩니다.
  • 변환이 적용되면 데이터 포인트와 직교 좌표를 사용하여 라벨을 플롯할 수 있습니다.
  • 플로팅이 완료된 후 원래 변환이 복원되어 x축 라벨 및 기타 구성 요소에 대한 기존 렌더링으로 되돌아갑니다.
  • 결과적으로 이제 데이터 포인트가 왼쪽 하단에서 위쪽으로 표시되고 y축 레이블이 올바르게 표시되고 회전됩니다.

추가 리소스

  • [AffineTransform](https://docs.oracle.com/javase/8/docs/api/java/awt/geom/AffineTransform.html)

위 내용은 Java의 회전된 좌표 평면에 데이터와 텍스트를 올바르게 플롯하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.