-. sscanf vs. sscanf_s
구 버전과 비교하여 파일 및 스트링 관련 함수들에 "_s"가 붙은 함수들이 제공되고 있다. 그러한 함수들 중에는 buffer overflow를 방지하기위한 목적 buffer 사이즈를 명시하도록 규정하고 있다.예를들어strcpy와strcpy_s를 비교해보면, 새로제공되는 함수는 target과source사이에 buffer 사이즈를 입력해야 한다.
"_s"가 붙은 신규함수와 붙지않은 구함수 사이에 함수원형에 있어서 차이점이 없는 경우는, #define을 사용하여 손쉽게 구함수를 신함수로 전환할 수 있으나, 주의해야할 함수가 있다. sscanf_s는 원형이 구 함수인 sscanf와 동일한것 처럼 보이고, 단순히 함수이름만 변경하여도 컴파일 에러가 발생하지 않지만, 실행시 에러가 발생하는 경우가 있다. %c 또는 %s의 포맷으로 데이터를 입력받는 변수의 경우, sizeof()를 사용하여 buffer의 사이즈를 명시하지 않는 경우, 에러가 발생하게 됨으로 주의해야 한다.
-. fopen vs fopen_s 과 fsopen
fopen_s 또한 fopen을 대신하도록 권고되고 있는데, 두 함수사이에 차이점이 있다.
outfile = fopen(filename, "w");
fopen(outfile, filename, "w");
위와 같이 파일을 open하는 경우, fopen과 달리 fopen_s를 사용하는 경우, open된 파일을 sharing이 허용되지 않는다.
따라서, sharing이 허용되도록 하기 위해서는
outfile = fsopen(filename, "w", _SH_DENYNO);
와 같이 fsopen함수와 _SH_DENYNO 플래그를 사용하여 파일을 open해야 한다.
Thursday, July 28, 2011
Thursday, February 17, 2011
Plane fitting
Plane equation:
(1) lx + my + nz = d
where d is a distance from an origin to the plane,
{l,m,n} is direction consines, and
sqrt(l*l + m*m + n*n)=1.
(2) ax + by + cz = 1
where d presented in (1) can be calculated by 1/sqrt(a*a + b*b + c*c).
(3) Ax + By + Cz = d^2
where (A, B, C) denotes a vector from an origin to the plane, which can be obtained by A = l*d, B=m*d, and C=n*d.
For a point cloud, P0, P1, P2, ~ Pn,
Its centroid C, (cx, cy, cz), is on an expected least squre fitted plane.
Therefore, dot product of [l, m, n] and (Pi-C) is zero.
l*xi + m*yi + n*zi = 0
whrer (xi,yi,zi) = Pi
To avoid [l, m, n] are estimated as zero,
a constraint of direction consines is adopted,
l^2 + m^2 + n^2 = 1.0
Subscribe to:
Posts (Atom)
-
Multi-byte Unicode char TCHAR strcat_s() _tcscaft_s() strcpy_s() _tcscpy_s() strncpy_s() _tcsncpy_s() strien() _tcsien() sprinif_s()...