2015-01-30 1 views
1

각 각도 값을 0에서 360도까지 설정했습니다. 이제는 ORIGIN으로 패널에서 일부 좌표를 가져오고 for 루프를 사용하여 원점을 기준으로 각도와 그 값을 기반으로 그래프를 그립니다. 예를 들어스윙에서 각도를 사용하여 호 그리기

:

for(int angle=0 ; angle< 360; angle++){ 
    graphics.draw(origin, angle, value[angle]); 
} 

나는 주어진 2 점에 대한하지만 내 예에서 호를 그리하는 방법에 대한 솔루션은 내가 선을 그릴 필요가 발견 내 학습 A를 인터넷에서 검색을 기반으로, 그네에 새로운 오전 원점에서 내점까지의 각도와 길이를 가진 원점으로부터의 거리는 value[angle]에 달려 있습니다.

누군가 Java Swing을 사용하여 이것을 어떻게 달성 할 수 있는지에 대한 조언을 해 줄 수 있습니까?

예를 들어 이미지가 다음과 같이 보입니다. (0,5), (30,7), 난 당신이 한 지점에서 선을 그릴 필요 추측 (85,4)

enter image description here

+0

정확하게 이해한다면 정확한 호가 아닙니다. 그렇습니까? 각도 0의 경우 길이가 5이고 각도 30의 길이가 7 인 경우 두 점이 같은 원에 있지 않습니다. 그들 사이에 어떤 선을 그리는 지 어떻게 결정합니까? 그림에 임의의 구불 구불 한 선이 표시됩니다. – RealSkeptic

+0

@RealSkeptic, 맞습니다.하지만 여기서 원을 그릴 계획이 아닙니다. 예를 들어 각도 0,30,85를 언급했습니다. 하지만 0부터 360까지의 값과 해당 길이의 전체 목록이 있습니다. 그래서 저는 각 학위를위한 선을 그릴 필요가 있습니다. 그래서 원 일 필요는 없습니다. 문제는 이것을 달성하는 데 도움이되는 API를 찾을 수 없다는 것입니다. 어떻게 할 수 있는지에 대한 조언을 해 주시겠습니까? – user3181365

+0

그래서 각도 0에있는 점과 각도 1에있는 점 사이의 직선은 양호합니까? – RealSkeptic

답변

2

- 나는 (각도, 길이)로 입력이 다음 것; 나는 당신이 호를 그리기를 원하지 않는다고 생각한다.

그것은 그런 일이 될 것입니다 :

double x = originx; 
double y = originy + value[0]*scale; 
for(int angle=1 ; angle< 360; angle++){ 
    double rad = angle*Math.PI/180.0; 
    double x1 = originx + value[i]*scale*Math.cos(rad); 
    double y1 = originy + value[i]*scale*Math.sin(rad); 
    graphics.drawLine(int)x, (int)y, (int)x1, (int)y1); 
    x = x1; 
    y = y1; 
} 

UPDATE : 당신이 Graphics2D에있어, 당신이 먼저하는 클래스 Path2D를 구축 그래픽에 그릴 수

참고 :

Path2D path = new Path2D.Double(); 
path.moveTo(0, value[0]); 
for(int angle=1 ; angle< 360; angle++){ 
    double rad = angle*Math.PI/180.0; 
    path.lineTo(value[i]*Math.cos(rad), value[i]*Math.sin(rad)); 
} 
g2d.translate(originx, originy); 
g2d.scale(scale, scale); 
g2d.draw(path); 
+0

응답 해 주셔서 감사합니다. 설명해 주시겠습니까? 왜 Math.cos와 Math.sin을 사용해야합니까? – user3181365

+0

극좌표를 직교 좌표로 변환하려면 –

관련 문제