Java で回転した座標平面にデータとテキストを正しくプロットするにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-06 11:47:03
オリジナル
314 人が閲覧しました

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

Java でのデータとテキストの座標平面の回転: プロットの問題の解決

Java で座標平面を回転し、データとラベルを正しくプロットするいくつかの重要な問題に対処する必要があります。この記事では、次の 2 つの一般的な問題の解決策を説明します。

  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

このファイルを変更する必要はありません。

説明

  • 座標平面を回転するためのキーは次のとおりです。アフィン変換を使用します。グラフィックス コンテキストは、原点を青い四角形の左下隅に移動し、Y 軸を -1 でスケーリングし、効果的に反転することによって変換されます。
  • 変換が適用されると、データ ポイントとラベルはデカルト座標を使用してプロットできます。
  • プロットが完了すると、元の変換が復元され、X 軸ラベルとその他のコンポーネントの従来のレンダリングに戻ります。
  • その結果、データ ポイントが左下隅から上に向かってプロットされるようになり、Y 軸ラベルが正しく表示および回転されるようになりました。

追加リソース

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

以上がJava で回転した座標平面にデータとテキストを正しくプロットするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート