2011-12-20 4 views
1

0에서 시작하여 그래픽 객체의 너비의 100 %까지가는 눈금 표시자를 10 % 간격으로 그려야합니다. 당신이 볼 수있는, 100 % 6 개 인덱스 실제 끝나기 전에이다 인덱스 (550)에 표시 될 것입니다,균등 한 간격의 눈금 표시 자

int width = 556; 
int k = width/10; 
for(int i = 0;i<width;i++){ 
    if(i%k==0){ 
     draw marker on gui indicating a ten percent increment (10,20,etc. up to 100%) 
    } 
} 

문제 :

내가 좋아하는 일을 할 것입니다. 물론 이것은 받아 들일 수없는 것입니다.

물론 폭의 실제 수치는 변경 될 변수입니다.

위의 코드를 변경하여 마커를 고르게 배치하고 마지막에 100 % 마커를 배치하는 방법을 보여줄 수 있습니까?

단순히 10 번째 마커를 삭제하고 수동으로 마커를 100 % 위치 시키면 마커 사이의 공백이 짝이되지 않습니다. 이렇게하는 더 좋은 방법이 있어야합니다. 그래서 누군가가 나를 보여줄 수 있기를 바랍니다.

+2

왜 그렇게 복잡합니까? 첫 번째 표식이 어디에 있는지 알 수 있습니다. 두 번째 것은 줄을 얼마나 많이 내려가는가? 그리고 세 번째? (그리고 루프가 0에서 시작한다고 가정하면, 세 번째 마커는 인덱스 2를 가지고 있고, 2 배는 원하는만큼 무엇입니까?) .... 등. – Bart

+0

@ 바트, 나는 어디로 첫 번째 가는지 알아. 나는 마지막 하나가 어디로가는 지 안다. 나는 위에 주어진 예제에서 6의 나머지 부분을 안다. 내가 모르는 것은 잔여 눈금에 나머지를 효율적으로 분배하여 틱 마크가 균등하게 배치되고 나머지가 변수라는 것을 기억하는 것입니다. 당신이 의미하는 바를 구체적으로 표현할 수 있습니까? +1 도와 주려고. – CodeMed

답변

1

제안 해 주신 모든 분들께 감사드립니다. 내가 사용한 솔루션은 폭과 높이가 눈금 간격의 정수배가되도록 직사각형의 크기를 제어하는 ​​것이었다. 그렇게하면 남은 사람들을 섞을 필요가 없습니다. 대신 사각형 주위의 버퍼 공간을 프레임의 크기를 조정할 때마다 나머지 부분을 차지합니다. 직사각형 치수 자체는 항상 눈금 간격의 정수배이기 때문에 이상한 눈금 간격의 문제는 더 이상 없습니다.

모두에게 감사드립니다. 방금 도와 줬던 각자에게 +1 점을 더했습니다.

3

소수 자릿수는 두자리를 사용하십시오. 모든 mod 작업을 수행하지 마십시오. 각 마커에 대해 하나씩 10 반복의 간단한 루프를 수행하십시오.

int width = 556; 
    double dist = ((double)width)/9.0; 
    double k = 0; 
    for(int i = 0; i < 10; i++){ 
     // Draw marker at (int)k 
     k += dist; 
    } 
+0

남은 부분과 간격이 일정하지 않은 동일한 문제가 발생하지 않을까요? 도와 주려고 +1. – CodeMed

+1

아니요, 그렇지 않습니다. 당신이 double을 사용하고 있기 때문에 소수점 이하 자릿수를 가질 것입니다. 네가 int를 사용했기 때문에 너는 전에하지 않았다. 이런 이유로 런타임 중에 오류가 발생합니다. 그러나, 마커를 k로 그려 넣으면, int로 캐스팅하면, 균등 한 간격의 틱 마크를 만들 수 있습니다. 귀하의 프로그램에서 사용해보십시오. 원칙적으로 작동해야합니다. – eboix

+3

또한, 이와 같이 잔량을 뒤섞었기 때문에 진드기가 여전히 눈에 고르지 않게 보일 수 있습니다. 이를 수정하려면 안티 앨리어싱 된 선을 사용하고 10 진수로 그릴 수 있습니다. – Pedery