2012-11-14 2 views
1

채우기 사각형을 그리기 위해 정사각형을 그려야합니다. 정사각형은 중심에서 선으로 그려야합니다. 우리는 자바 셰이프를 사용할 수 없다.Java : 선을 사용하여 중심점에서 채우기 스퀘어 그리기

우리는 중심점을 갖고 펜은 각 각도에서 가운데에서 사각형 가장자리까지 선을 그어야한다.

문제는 수학입니다. 페인트 할 거리를 계산할 때 무엇을 사용할 수 있습니까? 항상 같은 거리를 사용하면 원을 그리게됩니다.

감사

+0

쇼. 선은 가운데에서 가장자리로 가야합니다. 각도를 바꾸기 만하면됩니다. – mercutio

답변

1

사각형을 그릴 때 직각 삼각형의 빗변의 길이로 어떤 각도로 그려야하는지 생각할 수 있습니다. 삼각 함수 비율로 쉽게이를 해결할 수 있습니다. 까다로운 부분은 삼각형의 밑바닥이 움직이는 것입니다. 당신은 적색 라인 (HYP)의 길이를 해결해야

아래 도면의 좌측 절반에 나타내는 45도에서의 라인의 일례를 촬영

. 삼각법을 사용하여 각도가 adj이고 길이가 인 adj를 기준으로 한 hyp의 길이를 계산할 수 있습니다. adj 측면의 길이는 사각형의 절반입니다. 사용

공식은 :

COS (각도) = 형용사/HYP 재 배열

:

HYP = 형용사/COS (각도)

코드는 같을 것이다 이 :

public static double calculateLengthToPaint(double angle, double heightOfSquare){ 
     return (heightOfSquare/2.0)/Math.cos(Math.toRadians(angle)); 
} 

불행히도 그것은 전부는 아닙니다. 이것은 처음 45도에서는 완벽하게 작동하지만 각도가> 45 도가되면 삼각형의 인접한면이 바뀝니다 (아래 다이어그램의 오른쪽 절반에서 볼 수 있듯이). 45도마다 뒤집어 놓습니다.

이 뒤집기를 처리하려면 우리가 상상하고있는 삼각형의 각도를 계산하기 위해 메서드로 전달되는 각도 (12시 위치에서 사각형 주위의 각도)를 사용해야합니다. 위의 방법을 수정하여 수정 된 각도를 계산하는 로직을 추가했습니다.

public static double calculateLengthToPaint(double angle, double heightOfSquare){ 
    double flippy = angle % 90; 
    if (flippy > 45.0){ 
     flippy -= 90; 
     flippy = Math.abs(flippy); 
    } 
     return (heightOfSquare/2.0)/Math.cos(Math.toRadians(flippy)); 
} 

참고 :이 코드는 각도를 각도로 사용하며 양의 각도에서만 작동합니다. 또한 경계선이 경계선 주변에서 균등하게 증가하도록하려면 피타고라스 정리를 사용하여 hypoteneuse의 길이를 계산 한 다음 삼각법을 사용하여 각도를 계산하는 솔루션을 제안해야합니다. 그것을 그려라.

희망이 있습니다.당신이 지금 사용하는 사람들이 더 빨리 당신을 도울 수있는

Showing the triangle flipping over it's hypoteneuse at 45 degrees.

+0

내 문제를 해결합니다! : D 설명 주셔서 감사합니다. 매우 유용합니다 :) –

0

나는이

for(int i = sideLength * -1; i < sideLength; i++) { 
for(int j = sideLength * -1; j < sideLength; j++) { 
    graphics.drawLine(centerX + i, centerY + j); 
} 
} 

그 방법 같은 것을, 당신이 만들려고 노력하고 스퀘어의 모든 지점에 선을 그리는 것입니다 말할 것입니다. 나는 이것이 당신이 원한 것이라면 확실하지 않지만 작동 할 것입니다.

관련 문제