MFC의 CRgn을 대체할만한 리눅스에서의 클래스에는 뭐가 있을까요??

tyolee83의 이미지

윈도우 프로그램을 리눅스로 포팅하는데

다음과 같은 식으로 구성된 코드가 있네요

CRgn rgn;
rgn.CreateEllipticRgn(0, 0, iLength, iLength);
 
if(rgn.PtInRegion(x,y)){
   ....
}

즉, 타원을 만들고 어느 점이 그 타원에 들어가는지 안들어가는지를 알면 되는 거거든요

(다른 기능은 일단 필요없는듯 하네요)

이걸 리눅스에서 대체할만한 클래스를 찾아보는데

"region c++" "elliptic c++" 등으로 구글링을 해봐도

능력이 부족한건지 찾을 수가 없네요...

어떤 방법이 있을지 조언좀 부탁드립니다.

감사합니다.

Necromancer의 이미지

리눅스에는 MFC란건 없고요.

물어보시는걸 보아하니 그래픽쪽인거 같은데, 이쪽은 Qt, GTK+ motif(lesstif) 같은 위젯을 알아보시면 됩니다.

Written By the Black Knight of Destruction

Written By the Black Knight of Destruction

7339989b62a014c4ce6e31b3540bc7b5f06455024f22753f6235c935e8e5의 이미지

고등학교 수학 II에 나오는 이차곡선 중 타원 부분을 보면 쉽게 구현하실 수 있습니다. (뜬구름 잡는 답변)
http://en.wikipedia.org/wiki/Ellipse 참고하세요.

tyolee83의 이미지

타원형을 구현해서

그 식이 만족 하는지 안하는지를 알아보는건가요??

저한테는 쉽지많은 않은 구현인듯 하네요 ㅠㅠ
==========================
Toward Fully Understanding

//TODO

klyx의 이미지

리눅스로 포팅중이라고 하셨는데요, 먼저 어떤 라이브러리를 쓰는지를 적어야 답변이 가능할 것 같습니다.

말씀하신 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)가 만족하지만 검사하면됩니다.

bootmeta의 이미지

많은 라이브러리들에서 타원 내 특정점의 포함 여부를 확인하는 함수를 구현시 타원 영역이 아닌 타원을 둘러싼 직사각형 영역으로 간단히 검사하는 경우도 있어 주의가 필요합니다.

체스맨의 이미지

윈도용으로 작성된 코드가 단순히 타원 내에 점이 존재하는지만 파악하는 것이라면, 굳이 윈도의 Region API 를 이용하지 않고 위에서 말씀해주신, 타원 방정식을 이용하는 편이 더 나았을 지 모르겠네요.

그렇지 않고, 타원 형태로 GDI 클립핑이 필요하다면, X Window API 중 XCreateRegion, XPolygonRegion, XSetRegion 함수등을 이용하시면 됩니다.

또는, Region 이 임의 형태 윈도우 ( arbitrary shaped window ) 를 만드는데 사용되는 것이라면, 이때는 xshape 을 이용하시면 되고, 대표적인 예로는 xeyes 응용 프로그램이 있습니다.

Orion Project : http://orionids.org

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.