2015-04-06 2 views
-1

Я пытаюсь нарисовать линию, которая вращается вокруг и вокруг, но, к сожалению, мне пока не удается это исправить. Если кто-нибудь знает, как это неправильно, пожалуйста, укажите мне это. Благодарю. О, кстати, это красиво оформляется, но линия не успевает крутиться в полном круге. Он вращается на полпути, а затем вращается назад.Как нарисовать линию, которая вращается вокруг и вокруг?

public class Test2 extends Drag { 
static int x1 = 200; 
static int x2 = 400; 
static int y1 = 250; 
static int y2 = 250; 
static int whichQuad; 
static int initialx1 = 200; 
static int initialx2 = 400; 
static int initialy1 = 250; 
static int initialy2 = 250; 

public static void main(String args[]) throws InterruptedException { 

    // maybe y1, and y2 have to be x2/2? YESSSSSSSSSSSSSSSSSSS 
    // okay this is a given. initial y1 have to equal initali y2; 

    // x1+(x1/2) 

    // if x1 == 0, then quad == 1; 
    // if x1 == 5, and y1 == 0, then quad == 2; 
    // if x1 == 10, then quad == 3; 
    // if x1 == 5, and y1 == 10, then quad == 4; 

    // if x1 == initialx1, then quad == 1; 
    // ******if x1 == (initialx1/2)+(initialx2/2), and y1 == initialy2 - 
    // initialy1, then quad == 2; 
    // if x1 == initialx2, then quad == 3; 
    // ******if x1 == (initialx1/2)+(initialx2/2), and y1 == initialx2, then 
    // quad == 4; 

    // if quad == 1, then x1++,x2--,y1--,y2++ 
    // if quad == 2, then x1++,x2--,y1++,y2-- 
    // if quad == 3, then x1--,x2++,y1++,y2-- 
    // if quad == 4, then x1--,x2++,y1--,y2++ 

    Frame.frame.add(Paint.paint); 

    Frame.frame(); 

    while (true) { 
     if (x1 == initialx1) { 
      whichQuad = 1; 
     } 
     if (x1 == (initialx1/2) + (initialx2/2) && y1 == initialx2/2) { 
      whichQuad = 2; 
     } 
     if (x1 == initialx2) { 
      whichQuad = 3; 
     } 
     if (x1 == (initialx1/2) + (initialx2/2) && y1 == initialx1) { 
      whichQuad = 4; 
     } 

     if (whichQuad == 1) { 
      x1++; 
      x2--; 
      if(y1 != initialy2 - initialy1){ 
      y1--;} 
      y2++; 
     } 
     if (whichQuad == 2) { 
      x1++; 
      x2--; 
      y1++; 
      y2--; 
     } 
     if (whichQuad == 3) { 
      x1--; 
      x2++; 
      y1++; 
      y2--; 
     } 
     if (whichQuad == 4) { 
      x1--; 
      x2++; 
      if(y1 != initialy2 - initialy1){ 
       y1--;} 
      y2++; 
     } 

     System.out.println("(" + whichQuad + ")" + "x1:" + x1 + " y1:" + y1 + " x2:" + x2 + " y2:" + y2); 
     Thread.sleep(50); 
     Frame.frame.repaint(); 

    } 

} 

} 
+0

Вы пробовали выполнить свой код в отладчике и посмотреть, что происходит? – azurefrog

+0

Да. Я пробовал много часов. – Skillet

+0

Тогда вы можете уточнить, что происходит не так? Вы не указали ничего о том, какая часть вашего кода терпит неудачу, и вы не представили пример выполнения. – azurefrog

ответ

1

Ваш код был почти справа. Попробуй это.

if (x1 == initialx1) { 
    whichQuad = 1; 
} 
if (x1 == (initialx1/2) + (initialx2/2) && y1 < initialy1) { 
    whichQuad = 2; 
} 
if (x1 == initialx2) { 
    whichQuad = 3; 
} 
if (x1 == (initialx1/2) + (initialx2/2) && y1 > initialy1) { 
    whichQuad = 4; 
} 
+0

YESSSS! Ты гений!!! Ладно, спасибо, мужик. Ладно, у меня есть еще один вопрос. Когда он вращается по кругу, длина линии становится немного длиннее, а после полного вращения уменьшается до обычного размера, а затем повторяется. Это не так уж плохо, но мне интересно, почему это так. – Skillet

+0

Это потому, что вы перемещаете концы линии по прямоугольному пути, а не по круговой траектории. например x1 ++; y1--; перемещает точку 1 вверх и вправо под углом 45 градусов. Чтобы получить круговой путь, вы можете использовать Math.cos (угол) * r + centerX и Math.sin (угол) * r + centerY, чтобы получить координату x, y точки, которая была повернута вокруг данного центра. (r - расстояние от центра). И вы можете использовать Math.atan2 (y - centerY, x - centerX), чтобы получить угол поворота для данной точки. – SpiderPig

Смежные вопросы