-
[C++] 자체제작 알고리즘 문제Programming/C++ 2022. 11. 30. 18:38
지난번 BSpline 관련 작업하면서 발생한 문제가 있는데 특이하여 기록해본다.
<문제>
frame 0 1 2 3 4 5 …
new[i].x 0 2.3 2.7 3.5 4.5 5 …new[i].y 0 11 12 16 18 30 …
이런식의 데이터가 존재한다고 해보자.frame 은 int형이고, new는 vector<Point2f>형이다.
내가 하고싶은 것은 new[i].x가 정수인 new[i].y 의 값을 찾는 것이다.
예를 들어, new[1].x = 2.3이고 new[1].y = 11, new[0].x = 0, new[0].y =0 이런 상황에서
frame = 1일 때, new[].y 의 값을 찾는 것이다.
처음에는 이런 방식으로 코드를 짰다.
for( i++){
if( frame <= new[i].x <= frame+1) //실제 코드와는 다른 pseudo code이다.
frame++;}
이럴 경우에 new[1]이 if에 걸리지 않아서 문제 발생하였다.-> frame = 이면
0<= new[0].x (=2.3) <= 1이므로 if에 걸리지 않고 뒤의 i값도 뛰어넘는다.
frame 0 1 2 3 4 5
new 0 2.3 2.7 3.5 4.5 5내가 하고싶은 것은 이것이다.
frame이 new의 사이사이에 배치되어야 하는데 new의 값 분포가 무작위인 상황이다.
<해결방법>
while(1){
if( new[i] <= frame <= new[i+1]){ //pseudo code(실제와는 다름)
//계산,frame ++;
}
else
i++;if (ch > tempPts.size() - 1 || frame == dataSize - 1)
break;}
for문으로 카운트를 돌리는게 아니라, frame과 new의 조건이 통과했을 때만 카운트가 되어야 하므로
while반복문으로 바꿔주고 특정 조건에서 i++, frame++ 카운팅 해준다.
<느낀점>
문제를 표현하고 정리하는 것도 굉장히 어려운 일이구나... 다시 나중에 정리해야겠다....
좋은 예시라고 생각하고 정리하려고 했는데 무슨 말인지.... 설명이 어렵다
'Programming > C++' 카테고리의 다른 글
[Visual studio & C++] dll이 없어 코드 실행을 진행할 수 없습니다. dll 링킹하는 두 가지 방법 정리 (0) 2022.12.08 [C++] 포인터 *, & 헷갈릴 때 마다 보는 글 (0) 2022.11.18 C++ 유용한 최적화 방법 모음 (2) 2022.09.30 [Visual Studio 2019] 중단점이 현재 적중되지 않습니다. 이 줄과 관련된 디버거의 대상 코드 형식의 실행 코드가 없습니다. 조건부 컴파일, 컴파일러 최적화 또는 현재 디버거 코드 형식에서 이 줄.. (0) 2022.07.15 key event 호출 - space bar, enter.. 기호 (0) 2022.06.16