네개의 점(w,x,y,z)의 좌표(x,y)가 주어졌을 때, 이 점들을 이은 도형이 정사각형인지 판펼하는 소스를 C언어로 작성하라는 문제인데....
아 생각보다 엄청 어렵네요;;
정사각형의 수학적 정의, 4변이 같고, 4각이 같은 사각형 임을 이용해서 풀어보려 시도중인데...
기준점과 인접한 두 점사이의 각도가 직각 인것을 판별하는 함수를 작성해보려 하는데 어떻게 해야할까요??
도와주세요~ㅠㅠ
내적을 이용하면 어떨까요?
==== 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 모두 복잡하지 않은 벡터 연산이므로 쉽게 구할 수 있습니다.
> 기준점과 인접한 두 점사이의 각도가 직각 인것을 판별하는 함수를 작성해보려 하는데 어떻게 해야할까요??
질문자께서 질문하신 내용은 cosine 제2법칙으로 해결될 것 같습니다.http://en.wikipedia.org/wiki/Law_of_cosines 위의 링크를 참고하세요 :)
> 정사각형의 수학적 정의, 4변이 같고, 4각이 같은 사각형 임을 이용해서 풀어보려 시도중인데...
저도 질문자께서 말씀하신 것처럼 각 변의 길이가 서로 같고 내각이 모두 90도임을 증명하시면 될 것 같네요.
좋은 주말 되세요.
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
> 이제, 피타고라스 정리를 한번만 만족시키면 됩니다. > > 2*(x-y)^2 = (x-w)^2 = (y-z)^2
이 직전까지 과정으로 x,y,z,w 네 점으로 이루어진 다면체가 "마름모"라는건 확실하기 때문에 단순히 x-w == y-z 임만 보이면 됩니다. (x, y, z, w 는 모두 다른 위치의 점이라는 가정아래..) 마름모에서 두 대각선의 길이가 같은 길이이면 정사각형이니까요. 그리고 이 증명 방법은 내각을 고려할 필요가 없는 점이 좋은 것 같습니다 :)
텍스트 포맷에 대한 자세한 정보
<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]
내적을 이용하면 어떨까요?
내적을 이용하면 어떨까요?
====
No one asks you for change or directions.
-- Slo-Mo, J. Krokidas
4c2라고 해봤자 3개이므로 걍 세개 다
4c2라고 해봤자 3개이므로 걍 세개 다 체크하시죠.
1. ab/cd, ac/bd, ad/bc 이렇게 두개씩 점을 묶어 선을 긋는다.
2. 이중 두개는 선이 서로 평행이고 하나는 직각이어야 한다.
3. 세 경우 다 두 선의 길이가 같아야 한다.
윗분 말씀대로 벡터이용하시면 될듯합니다.
각점의 z 를 0 으로 놓게되면 3차원벡터에서 z=0 인 평면상에서의 벡터공식을 사용할수있는데요~
이 벡터 공식중에는 두 벡터가 서로 직교인지 알수있는 공식이 있습니다~
그럼 각 4개의 좌표를 서로 연산해서 서로 모두 직교하고있다면 일단 직사각형이겠죠?
그다음엔 각 4개 좌표의 거리(두좌표간의 거리를 구하는 공식으로 고등학교 10-나? 여기에 나오죠?) 그걸 구해서 계산하면될것같은데요?
그런데 더 좋은 알고리즘도 있을것같아요~ 전 지금 생각은 나질않네여..
4개의 점으로 가능한 모든 벡터를 구한 다음에 그중에
4개의 점으로 가능한 모든 벡터를 구한 다음에 그중에 크기가 가장 큰 벡터 2개를 뽑습니다. 그 두 벡터가 대각선이 될텐데 (일부 사각형 제외...) 1) 그 둘의 크기가 같고 2) 가운데서 만나며, 3) 그 두 벡터가 직각이면 정사각형입니다.
1, 2, 3 모두 복잡하지 않은 벡터 연산이므로 쉽게 구할 수 있습니다.
law of cosines
> 기준점과 인접한 두 점사이의 각도가 직각 인것을 판별하는 함수를 작성해보려 하는데 어떻게 해야할까요??
질문자께서 질문하신 내용은 cosine 제2법칙으로 해결될 것 같습니다.
http://en.wikipedia.org/wiki/Law_of_cosines
위의 링크를 참고하세요 :)
> 정사각형의 수학적 정의, 4변이 같고, 4각이 같은 사각형 임을 이용해서 풀어보려 시도중인데...
저도 질문자께서 말씀하신 것처럼 각 변의 길이가 서로 같고 내각이 모두 90도임을 증명하시면 될 것 같네요.
좋은 주말 되세요.
x,y,z,w의 4점의 좌표를 안다고 하면, 일단
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
마지막 피타고라스 부분
> 이제, 피타고라스 정리를 한번만 만족시키면 됩니다.
>
> 2*(x-y)^2 = (x-w)^2 = (y-z)^2
이 직전까지 과정으로 x,y,z,w 네 점으로 이루어진 다면체가 "마름모"라는건 확실하기 때문에
단순히 x-w == y-z 임만 보이면 됩니다. (x, y, z, w 는 모두 다른 위치의 점이라는 가정아래..)
마름모에서 두 대각선의 길이가 같은 길이이면 정사각형이니까요.
그리고 이 증명 방법은 내각을 고려할 필요가 없는 점이 좋은 것 같습니다 :)
댓글 달기