2012-07-13 41 views
1

裏面的人等級:在Java中繪製頭部和頸部。問題與DrawLine的

public Point[] endPointArray; 
    private int scalar; 
    private Head head; 
    private Neck neck; 

    public Person(){ 
    scalar = 1; 
    endPointArray = new Point[100]; 
    for (int i = 0 ; i < 100 ; i++){ 
     endPointArray[i] = new Point(); 
    } 
    positionArray = new int[4]; 
    point = new Point(0,0); 
    endPointArray[0].x = 5; 
    endPointArray[0].y = 5; 

    head = new Head(neck, endPointArray, scalar); 
    neck = new Neck(body, endPointArray, scalar); 
    } 

    public void draw(Graphics g){ 
    head.draw(g); 
    neck.draw(g); 
    } 

裏面的頭班:

// ---------- CONSTANTS. ---------- 
    private static int Base_Radius = 20; 

    // ---------- VARIABLE DECLARATIONS. ---------- 
    private int radius; 
    private int scale; // Scale determines how large the Head will be. 
    private Point startingPoint; //Starting Point for the Person and the Head. 
    private Point endingPoint; //Ending Point, where the Neck will start from. 
    private Point[] endPointArray; // Contains startingPoint in position [0] by this point from Person. 
    private Point centre; 
    private Neck neck; 

    // ---------------------------------------- 
    // HEAD CREATION. 
    // ---------------------------------------- 
    public Head(Neck neck, Point[] endPointArray, int scale){ 

    this.neck = neck; 
    this.endPointArray = endPointArray; 
    this.scale = scale; 

    radius = Base_Radius * scale; 
    startingPoint = new Point(); 
    endingPoint = new Point(); 
    centre = new Point(); 

    // Copies the value of endPointArray[0] into startingPoint. 
    startingPoint.x = endPointArray[0].x; 
    startingPoint.y = endPointArray[0].y; 

    // Picks the point on the Head where the Neck will start from. 
    endingPoint.x = startingPoint.x + radius; 
    endingPoint.y = startingPoint.y + (2*radius); 

    // Assigns the value of the circles centre to the centre point. 
    centre.x = startingPoint.x + radius; 
    centre.y = startingPoint.y + radius; 
    // Puts the value of the endingPoint into the endPointArray[1]. 
    endPointArray[1].x = endingPoint.x; 
    endPointArray[1].y = endingPoint.y; 
    } 

    // ---------------------------------------- 
    // DRAW THE HEAD. 
    // ---------------------------------------- 
    public void draw(Graphics g){ 
    g.drawOval(startingPoint.x, startingPoint.y, radius, radius); 
    System.out.println("Radius : " + radius); 
    System.out.println("Head Starting Point : ("+startingPoint.x+","+startingPoint.y+")."); 
    System.out.println("Head Ending Point : ("+endingPoint.x+","+endingPoint.y+").\n"); 
    } 

裏面的頸部類:

// ---------- CONSTANTS. ---------- 
private static int Base_Length = 10; 

// ---------- VARIABLE DECLARATIONS. ---------- 
private int length; 
private int scale; // Scale determines how large the Head will be. 
private Point anglePoint; 
private Point startingPoint; //Starting Point for the Person and the Head. 
private Point endingPoint; //Ending Point, where the Neck will start from. 
private Point[] endPointArray; // Contains startingPoint in position [0] by this point from Person. 
private Body body; 

// ---------------------------------------- 
// NECK CREATION. 
// ---------------------------------------- 
public Neck(Body body, Point[] endPointArray, int scale){ 

    this.endPointArray = endPointArray; 
    this.body = body; 
    this.scale = scale; 

    length = Base_Length * scale; 
    startingPoint = new Point(); 
    endingPoint = new Point(); 
    anglePoint = new Point(); 

    // Making the startingPoint equal to the endPointArray[1]. 
    startingPoint.x = endPointArray[1].x; 
    startingPoint.y = endPointArray[1].y; 

    // Seting the values of the point where the neck finishes. 
    endingPoint.x = startingPoint.x; 
    endingPoint.y = startingPoint.y + length; 

} 

// ---------------------------------------- 
// DRAW THE HEAD. 
// ---------------------------------------- 
public void draw(Graphics g){ 
    g.drawLine(startingPoint.x, startingPoint.y, endingPoint.x, endingPoint.y); 
    System.out.println("Neck Starting Point : ("+startingPoint.x+","+startingPoint.y+")."); 
    System.out.println("Neck Ending Point : ("+endingPoint.x+","+endingPoint.y+")."); 
    } 

輸出:

半徑:20

頭起點:(5,5)。

頭頂終點:(25,45)。

頸部起點:(25,45)。

頸部終點:(25,55)。

頭在小組中繪製在5,5,似乎有正確的半徑。頸部離開頭部遠離頭部。輸出看起來看起來不錯,但從視覺上看它是不正確的。脖子應該是從頭部底部向下的水平線,我不知道爲什麼它不按我期望的方式行事。 對不起,如果這是一個新手問題,但我現在很困難。

回答

0

問題是,drawOval將寬度和高度作爲參數,但是您傳遞的是半徑。您需要使用:

g.drawOval(startingPoint.x, startingPoint.y, 2 * radius, 2 * radius); 

From the API

public abstract void drawOval(int x, int y, int width, int height) 
    Draws the outline of an oval. The result is a circle or ellipse that fits within the rectangle specified by the x, y, width, and height arguments. 
    The oval covers an area that is width + 1 pixels wide and height + 1 pixels tall. 

Parameters: 
    x - the x coordinate of the upper left corner of the oval to be drawn. 
    y - the y coordinate of the upper left corner of the oval to be drawn. 
    width - the width of the oval to be drawn. 
    height - the height of the oval to be drawn. 
+0

謝謝你的,有時候你就不能制定出這樣的小錯誤。 – user1522263 2012-07-13 00:31:52