MFC의 CRgn을 대체할만한 리눅스에서의 클래스에는 뭐가 있을까요??
글쓴이: tyolee83 / 작성시간: 월, 2007/12/31 - 2:28오후
윈도우 프로그램을 리눅스로 포팅하는데
다음과 같은 식으로 구성된 코드가 있네요
CRgn rgn; rgn.CreateEllipticRgn(0, 0, iLength, iLength); if(rgn.PtInRegion(x,y)){ .... }
즉, 타원을 만들고 어느 점이 그 타원에 들어가는지 안들어가는지를 알면 되는 거거든요
(다른 기능은 일단 필요없는듯 하네요)
이걸 리눅스에서 대체할만한 클래스를 찾아보는데
"region c++" "elliptic c++" 등으로 구글링을 해봐도
능력이 부족한건지 찾을 수가 없네요...
어떤 방법이 있을지 조언좀 부탁드립니다.
감사합니다.
Forums:
리눅스에는 MFC란건
리눅스에는 MFC란건 없고요.
물어보시는걸 보아하니 그래픽쪽인거 같은데, 이쪽은 Qt, GTK+ motif(lesstif) 같은 위젯을 알아보시면 됩니다.
Written By the Black Knight of Destruction
Written By the Black Knight of Destruction
고등학교 수학 II에
고등학교 수학 II에 나오는 이차곡선 중 타원 부분을 보면 쉽게 구현하실 수 있습니다. (뜬구름 잡는 답변)
http://en.wikipedia.org/wiki/Ellipse 참고하세요.
타원형을
타원형을 구현해서
그 식이 만족 하는지 안하는지를 알아보는건가요??
저한테는 쉽지많은 않은 구현인듯 하네요 ㅠㅠ
==========================
Toward Fully Understanding
//TODO
리눅스로
리눅스로 포팅중이라고 하셨는데요, 먼저 어떤 라이브러리를 쓰는지를 적어야 답변이 가능할 것 같습니다.
말씀하신 MFC도 윈도우의 모든 것을 대표하는것이 아닌것 처럼, 리눅스라고 해도 사용하는 GUI라이브러리에 따라 함수나 클래스등이 달라질테니까요...
예를 들어 Qt를 이용한다면 QRegion클래스를 이용해서
QRegion region(0, 0, iLength, iLength, QRegion::Ellipse);
if (region.contains(QPoint(x, y)) {
...
}
이런식으로 하면 될것 같네요.
참고로 포함 여부만 구하면 된다면 위에서 말씀하신 타원식을 이용하는 방법으로...
중심이 (0, 0)이고 장축길이 2a에 단축길이 2b인 타원 내부의 점은
x^2/a^2 + y^2/b^2 <= 1 (등호는 타원의 경계일때)
란 식을 만족합니다.
장축 단축 모두 iLength로 같고(원이네요), 이걸 (iLength/2, iLength/2)로 평행이동한 경우이므로..
(x-iLength/2)^2/(iLength/2)^2+(y-iLength/2)^2/(iLength/2)^2 <=1
or (2x-iLength)^2 + (2y-iLength)^2 <= iLength^2
이란 부등식을 (x,y)가 만족하지만 검사하면됩니다.
직접 구현이 아닌 경우
많은 라이브러리들에서 타원 내 특정점의 포함 여부를 확인하는 함수를 구현시 타원 영역이 아닌 타원을 둘러싼 직사각형 영역으로 간단히 검사하는 경우도 있어 주의가 필요합니다.
윈도용으로 작성된
윈도용으로 작성된 코드가 단순히 타원 내에 점이 존재하는지만 파악하는 것이라면, 굳이 윈도의 Region API 를 이용하지 않고 위에서 말씀해주신, 타원 방정식을 이용하는 편이 더 나았을 지 모르겠네요.
그렇지 않고, 타원 형태로 GDI 클립핑이 필요하다면, X Window API 중 XCreateRegion, XPolygonRegion, XSetRegion 함수등을 이용하시면 됩니다.
또는, Region 이 임의 형태 윈도우 ( arbitrary shaped window ) 를 만드는데 사용되는 것이라면, 이때는 xshape 을 이용하시면 되고, 대표적인 예로는 xeyes 응용 프로그램이 있습니다.
Orion Project : http://orionids.org
댓글 달기