2013-06-15 2 views
1

고정 된 크기의 문자와 전체 단어를 다음 줄로 묶어야하는 텍스트가있는 경우 가장 가까운 사각형에 가장 가까운 피팅 중심 정사각형을 계산하는 최적 알고리즘은 최소 공간 사용자에게 좋을 것 같습니까?최적의 메시지 상자 크기와 단어 랩 2

화면이 문자

void calculate_wrapped_text_size(const char *text, int box_width_in_px, int &width_in_chars, &height_in_chars) 
{ 
... 
} 

에서 생성 싸여 텍스트 크기를 계산하기 위해이

#define max_width 1024 
#define max_height 768 
#define char_width 10 
#define char_height 16 

기능으로 정의된다 그래서 주어진 입력 1 호선 텍스트 LONGTEXT longertext anytext \n 라인 2 < ... 등. ..> 지정된 폭에 맞게 줄 바꿈 텍스트를 계산합니다.

void find_optimal_size(const char *text, int &optimal_width_in_px, int &optimal_height_in_px) 
{ 
... 
} 

사용자에게 가장 적합하도록 너비와 높이에 가장 적합한 크기를 계산하는 표준 방법이 있습니까? 나는 최소 면적 상자를 찾는 길을 가고 나서 양쪽면에서 최소한의 차이만큼 반복한다고 생각 했습니까?

답변

0

당신이 생각한 "최소한의 영역 상자"는 분명히 단 한 줄 일 것입니다. 이것은 당신이 원하는 것이 아닙니다.

처음에는 라인 랩 알고리즘을 직접 작성해야하는지 확인하십시오. 왜냐하면 대부분의 GUI 툴킷이 네이티브 또는 크로스 플랫폼에서이 작업을 수행하기 때문입니다.

직접해야하는 경우 다음과 같이하십시오. 허용 ​​할 최대 너비를 계산하십시오. 표시 창의 너비를 기준으로하거나 해당 창의 다른 위젯의 레이아웃을 기반으로합니다.

다음 줄마다 : 단어가 최대 너비에 도달 할 때까지 씁니다. 그 단어는 다음 줄을 필요로하는 첫 번째 단어입니다.

당신이 생각해야 할 세부 사항이 있습니다 : 먼저 문자가 모두 같은 너비인지 (단어 폭 계산이 훨씬 쉬워 지는지) 단어 경계 (공백, 탭, "-").

고려할 사항이 있습니다. 창문이 너무 좁아서 특정 단어가 줄의 첫 단어인데도 적합하지 않으면 어떻게해야합니까? 위의 알 고는 더 많은 줄을 계속 추가 할 것입니다. 알고리즘의 특별한 경우를 추가해야합니다. 줄의 첫 단어 인 경우 단어가 줄 바꿈되지 않을 수도 있습니다. 대신 줄 바꿈 문자로 입력해야합니다. 예를 들어 줄에 가능한 한 많은 문자를 씁니다. 다음 줄에 남는다.

+0

그러나 나는 가능한 모든 조합을 찾거나 정렬 한 후에 가장 직사각형 상자를 검색 할 것이라고 언급했습니다. 예. 문자의 너비와 높이가 고정되어 있습니다. – Ulterior

+0

@ 맨 위로 거의 항상 직사각형입니다. 당신은 "광장"을 의미합니까? –

+0

0-> 화면 너비, 0-> 화면 높이를 반복하면 많은 조합이 생성됩니다. – Ulterior