0

こんにちは皆さん、主に N - S で始まる曲線を太字で描く必要があります。可能であれば、350-10 340-20 などになります。QuadCurve2D と drawArc を試しましたが、どれも機能しませんでした。drawPolyline(xPoints, yPoints, WIDTH) の使用を避ける方法はありますか?

ここに画像の説明を入力

これは、自分でテストする時間の損失を避けるためのコードの一部です。

        public class PaintMyQuad extends JPanel {

    @Override
    protected void paintComponent(Graphics g) {

        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g.create();

        QuadCurve2D.Double curve = new QuadCurve2D.Double(200,0,200,100,200,200);
        QuadCurve2D.Double curve1 = new QuadCurve2D.Double(200,0,180,100,200,200);
        QuadCurve2D.Double curve2 = new QuadCurve2D.Double(200,0,160,100,200,200);
        //etc
        g2d.setColor(Color.RED);
        g2d.draw(curve);
        g2d.draw(curve1);
        g2d.draw(curve2);
        g2d.drawOval(100,100,200,200);
        g2d.drawArc(100,100, 100, 200, 90, 180);
        g2d.drawArc(100, 100, 100, 200, 180, 360);
        g2d.drawArc(100, 100, 0, 200, 90, 180);
        g2d.drawRect(100, 100, 200, 200);
4

2 に答える 2

2

太い線が必要な場合は、次のようにしてください。

....
Graphics2D g2d = (Graphics2D)g;

BasicStroke pen1 = new BasicStroke(5); // this is stroke with 5px width,
g2d.setStroke(pen1);

g2d.drawArc(100,100, 100, 200, 90, 180);
g2d.drawArc(100, 100, 100, 200, 180, 360);
...

2種類の線を2画にして使います。

于 2013-10-31T06:44:38.500 に答える
1

これが本当に答えであるかどうかはわかりませんが、解決の問題に遭遇しましたか。アンチエイリアシングを試してみましたが、見た目が悪くなりました。これを行う方法の 1 つは、for ループに奇数と偶数の if ステートメントを入れることです。多分私はそれを古い学校の方法でやっていますか?

import java.awt.*;
import javax.swing.*;

public class Stereonet{

  private static int centreX, centreY, radius;
  private Color colour;

  /**Stereonet template contructor takes 3 int parameters 
    * x, y for centre position and radius for stereonet radius*/
  public Stereonet(int x , int y, int radius, Color colour){

    centreX = x;
    centreY = y;
    this.radius = radius;
    this.colour = colour;

  }

    public void draw(Graphics g){

      Graphics2D g2D = (Graphics2D) g;           
      g2D.setStroke(new BasicStroke(2F));  
      g.setColor(colour);
      g.drawOval(centreX - radius , centreY - radius, radius * 2 , radius * 2);
      g2D.setStroke(new BasicStroke(1F)); 
      g.drawLine(centreX, centreY - radius, centreX, centreX + radius);
      g.drawLine(centreX - radius, centreY, centreX + radius, centreY);

      g2D.setStroke(new BasicStroke(1F));

      for(int degrees = 10; degrees <= 80; degrees += 10){


        double greatRadius = radius / (Math.cos(Math.toRadians(degrees))); // radius of great circle
        int greatX1 = (int)Math.round(centreX + radius * (Math.tan(Math.toRadians(degrees))) 
                                        - greatRadius); // x coord of great circle left hemisphere
        int greatX2 = (int)Math.round(centreX - (radius * (Math.tan(Math.toRadians(degrees)))) 
                                        - greatRadius); // x coord of great circle right hemisphere
        int greatY = (int)Math.round(centreY - greatRadius); // y coord of great circle

        double smallRadius = (radius / (Math.tan(Math.toRadians(degrees))));
        int smallY1 = (int)Math.round((centreY  - (radius / (Math.sin(Math.toRadians(degrees)))) - smallRadius));
        int smallY2 = (int)Math.round((centreY  + (radius / (Math.sin(Math.toRadians(degrees)))) - smallRadius));
        int smallX = (int)Math.round(centreX - smallRadius);

        g.drawArc(greatX1, greatY, 2 * (int)Math.round(greatRadius), 2 * (int)Math.round(greatRadius), 
                  90 + degrees, 180 - ( 2 * degrees));
        g.drawArc(greatX2, greatY, 2 * (int)Math.round(greatRadius), 2 * (int)Math.round(greatRadius), 
                  270 + degrees, 180 - ( 2 * degrees));
        g.drawArc(smallX, smallY1, 2 * (int)Math.round(smallRadius), 2 * (int)Math.round(smallRadius), 
                  270 - degrees, 180 - ( 2 * (90 - degrees)));
        g.drawArc(smallX, smallY2, 2 * (int)Math.round(smallRadius), 2 * (int)Math.round(smallRadius), 
                  90 - degrees, 180 - ( 2 * (90 - degrees)));  

      }

    }

    public static int getRadius(){

      return radius;

    }  

    public static int getX(){

      return centreX;

    }  

     public static int getY(){

      return centreY;

    }   
于 2013-10-31T06:47:16.420 に答える