2016-10-18 7 views
0

Im 어떤 유형의 구문 오류도 없지만 수학/논리 측면에서는 더 많은 것을 말합니다. 따라서 선은 시작점과 끝점 만주고 원을 그리려는 시도입니다. 내 문제는 선의 기울기를 얻는 데 있습니다. 이것에 대한 문제가 원에서 선 그리기

는, 가까운 엔드 포인트 가져 같은 축의 일단에있는에 더 큰 공간은 각각의 사이에

public void setVectorX(){ 
     xVector = difX/difY; 
    } 
    public void setVectorY(){ 
     yVector = difY/difX; 
    } 

    public void makeLine(){ 
     setVectorX(); 
     setVectorY(); 

     double prevX; 
     double prevY; 

     for(int i = 0; i < d; i++){ 

      if(i == 0){ 
       prevX = startX; 
       prevY = startY; 
      } else { 
       Circle prev = line.get(i-1); 
       prevX = prev.getX(); 
       prevY = prev.getY(); 
      } 

      Circle circ = new Circle(prevX+xVector,prevY+yVector,thickness,color); 
      line.add(circ); 
     } 
    } 
있다

다음은 선 기울기를 받고 도장 내 코드입니다 서클이 실제로 칠 해지지 않을 때까지 누구든지이 작업을 수행하는보다 효과적인 방법을 알고 있으므로 선이 100 % 시간을 어떻게 채워야합니까?

미리 감사드립니다.

이 같아야합니다 Heres는 무엇을 : Heres는

enter image description here

그것이 무엇 끝에 축 중 하나가 시작과 같은 축에 접근 같습니다

enter image description here

다음은 요청한대로 d, difX 및 difY를 선언하는 코드입니다.

public Line(int nStartX, int nStartY, int nEndX, int nEndY, int nThickness,Color nColor){ 
     startX = nStartX; 
     startY = nStartY; 

     endX = nEndX; 
     endY = nEndY; 

     thickness = nThickness; 

     d = Math.sqrt(Math.pow((startX-endX), 2)+Math.pow((startX-endX), 2)); 

     color = nColor; 

     difX = endX-startX; 
     difY = endY-startY; 

     makeLine(); 
    } 
+1

일부 이미지가 정말 도움이 될 추가 할 때이 아마 드문 경우 중 하나가 될 것입니다. 사진을 보여 주듯이 "지금 당장 보이는 방식"입니다. – GhostCat

+0

해결책을 찾기에는 너무 많은 코드가 누락되었습니다. 'xvector''yVector'는 int로 선언되지 않았습니까? – StephaneM

+0

그들은 이중 –

답변

0

difX와 difY의 차이가 커짐에 따라 점들이 점점 간격을 두는 것을 보았습니다. 이 메소드를 추가 한 다음 벡터를 설정 한 후에 호출하면이를 수정해야합니다. 지금

public void rescale(){ 
    double hyp = Math.sqrt(Math.pow(xVector,2) + Math.pow(yVector,2)); 
    xVector /= hyp; 
    yVector /= hyp; 
} 

변경 : 여기 는 방법입니다

setVectorX(); 
setVectorY(); 

또한
setVectorX(); 
setVectorY(); 
rescale(); 

에, 당신은

xVector = difX/difY; 

로 변경해야 같은
xVector = difX 

는 yVector

의 두 번째 문제는 실수로 두 번 DIFX을 사용합니다. 당신은 한 :

d = Math.sqrt(Math.pow((startX-endX), 2)+Math.pow((startX-endX), 2)); 

그것이 있어야 할 때 :

d = Math.sqrt(Math.pow((startX-endX), 2)+Math.pow((startY-endY), 2)); 
+0

을 편집했습니다. https://docs.google.com/document/d/1mKxaEBymIBRHCUJjeJZRTbtiBAuRyr2ifiCb-O8rY_o/edit?usp=sharing –

+0

감사합니다! 이것은 거의 완벽하게 작동하지만 약간의 문제가 있습니다. 같은 축에 가까워 질수록 짧은 선이 생깁니다.종점에 대해 1,150 점을 입력했는데 선이 매우 짧습니다. 축이 겹치면 전체 선이 사라집니다. 내 for 루프 d (거리)에서 실행 아마도 이것은 몇 가지 문제를 일으키는 무엇입니까? –

+0

은 끝점의 좌표가 다를 수 있습니까? –