정사각형 판별 문제입니다.

sinlnyxl의 이미지

네개의 점(w,x,y,z)의 좌표(x,y)가 주어졌을 때, 이 점들을 이은 도형이 정사각형인지 판펼하는 소스를 C언어로 작성하라는 문제인데....

아 생각보다 엄청 어렵네요;;

정사각형의 수학적 정의, 4변이 같고, 4각이 같은 사각형 임을 이용해서 풀어보려 시도중인데...

기준점과 인접한 두 점사이의 각도가 직각 인것을 판별하는 함수를 작성해보려 하는데 어떻게 해야할까요??

도와주세요~ㅠㅠ

slomo의 이미지

내적을 이용하면 어떨까요?

====
No one asks you for change or directions.
-- Slo-Mo, J. Krokidas

익명 사용자의 이미지

4c2라고 해봤자 3개이므로 걍 세개 다 체크하시죠.

1. ab/cd, ac/bd, ad/bc 이렇게 두개씩 점을 묶어 선을 긋는다.
2. 이중 두개는 선이 서로 평행이고 하나는 직각이어야 한다.
3. 세 경우 다 두 선의 길이가 같아야 한다.

익명 사용자의 이미지

각점의 z 를 0 으로 놓게되면 3차원벡터에서 z=0 인 평면상에서의 벡터공식을 사용할수있는데요~

이 벡터 공식중에는 두 벡터가 서로 직교인지 알수있는 공식이 있습니다~

그럼 각 4개의 좌표를 서로 연산해서 서로 모두 직교하고있다면 일단 직사각형이겠죠?

그다음엔 각 4개 좌표의 거리(두좌표간의 거리를 구하는 공식으로 고등학교 10-나? 여기에 나오죠?) 그걸 구해서 계산하면될것같은데요?

그런데 더 좋은 알고리즘도 있을것같아요~ 전 지금 생각은 나질않네여..

익명 사용자의 이미지

4개의 점으로 가능한 모든 벡터를 구한 다음에 그중에 크기가 가장 큰 벡터 2개를 뽑습니다. 그 두 벡터가 대각선이 될텐데 (일부 사각형 제외...) 1) 그 둘의 크기가 같고 2) 가운데서 만나며, 3) 그 두 벡터가 직각이면 정사각형입니다.

1, 2, 3 모두 복잡하지 않은 벡터 연산이므로 쉽게 구할 수 있습니다.

addnull의 이미지

> 기준점과 인접한 두 점사이의 각도가 직각 인것을 판별하는 함수를 작성해보려 하는데 어떻게 해야할까요??

질문자께서 질문하신 내용은 cosine 제2법칙으로 해결될 것 같습니다.
http://en.wikipedia.org/wiki/Law_of_cosines
위의 링크를 참고하세요 :)

> 정사각형의 수학적 정의, 4변이 같고, 4각이 같은 사각형 임을 이용해서 풀어보려 시도중인데...

저도 질문자께서 말씀하신 것처럼 각 변의 길이가 서로 같고 내각이 모두 90도임을 증명하시면 될 것 같네요.

좋은 주말 되세요.

snowall의 이미지

x,y,z,w의 4점의 좌표를 안다고 하면, 일단 아무거나 하나 고릅니다. x라고 하죠.

x-y, x-z, x-w의 거리를 계산하면, 정사각형이라면 그중 정확히 2개가 같아야 합니다. 만약 셋 다 다르거나, 셋 다 같으면 정사각형이 아니겠죠.

x-y = x-z 라고 가정해 봅시다.

그럼, 정사각형이라면 x-y = x-z = w-y = w-z가 성립해야 합니다.

이제, 피타고라스 정리를 한번만 만족시키면 됩니다.

2*(x-y)^2 = (x-w)^2 = (y-z)^2

그럼 정사각형입니다. 자세한 증명은 생략하겠습니다. (따라서, 틀릴수도 있는 알고리즘입니다.)

피할 수 있을때 즐겨라! http://melotopia.net/b

addnull의 이미지

> 이제, 피타고라스 정리를 한번만 만족시키면 됩니다.
>
> 2*(x-y)^2 = (x-w)^2 = (y-z)^2

이 직전까지 과정으로 x,y,z,w 네 점으로 이루어진 다면체가 "마름모"라는건 확실하기 때문에
단순히 x-w == y-z 임만 보이면 됩니다. (x, y, z, w 는 모두 다른 위치의 점이라는 가정아래..)
마름모에서 두 대각선의 길이가 같은 길이이면 정사각형이니까요.
그리고 이 증명 방법은 내각을 고려할 필요가 없는 점이 좋은 것 같습니다 :)

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.