직선위의 좌표구하기...
글쓴이: oldbell / 작성시간: 수, 2008/03/12 - 10:08오후
------------------------ 답변 주신분의 지적에 따라 질문을 수정했습니다. -------------
ax+by+c=0의 직선위의 점 m,n와 d만큼 떨어진 점의 좌표(x',y')를 구하려고 합니다.
x축을 기준으로 각도가 예각인 경우의 좌표를 찾으려는데요..( a,b,c,d의 값은 알고 있습니다.)
| ax' + by' + c | / sqrt( a^2 + b^2 ) = d 에서
x',y'의 값을 어떻게 구해야 할지.. 막히네요...
조언을 부탁드립니다.
Forums:
뭘하고 싶으신건지는
뭘하고 싶으신건지는 모르겠지만.
am+bn+c = 0
(x-m)^2 + (y-n)^2 = d^2
이렇게 두가지 식을 푸셔야겠는데요... 보심 알겠지만 서로 구하려는 변수가 다릅니다. 위의 식에서의 미지수는 m, n 이구요. 아래 식에서의 미지수는 x, y, m, n 이 됩니다.
네 가지 미지수에 대한 근을 찾으려면 서로 독립적인 식 네가지가 나와야 하므로 이 식은 underconstraint 상태로 해가 무한히 많습니다.
잘 생각해보시면 m, n 이 고정되지 않는 이상 x, y 는 ax+by+c = 0 직선을 중심으로 하는 두께 2d 짜리 선이 되는 것을 알 수 있습니다. 잘 모르시겠다면 직선을 따라 움직이는 반지름 d 짜리 원을 생각해보세요. 이 원의 중심이 m, n 이 되는거고, 이 원의 궤적이 원하시는 x, y 가 되는 겁니다.
--
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
먼저 답변에
먼저 답변에 감사드립니다.
다시 설명드립니다.
직선의 방정식 ax+by+c=0 위의 점 m,n 에서 d 만큼 떨어진 새로운 좌표 x', y'을 구하는 것이 문제입니다.
(직선의 방정식의 a,b,c와 점 m,n 거리d의 값은 알고 있습니다.)
| am + bn + c | / sqrt( a^2 + b^2 ) = d 의 식은 (식에서의 m,n은 사실 x', y' 입니다.)
d를 알때에 m,n은 두가지가 나올 수 있는데 이를 방지하기 위해 sin() 값이 예각인 경우의 좌표만 구하는 것입니다.
참고를 위한 코드입니다.
인생의 무게를 느껴라. 아는 만큼 보이는게다.
x축을 기준으로 한
x축을 기준으로 한 예각이라는 조건만으로는 답이 2개인 경우도 있겠는데요...
--------------------------
snowall의 블로그입니다.
http://snowall.tistory.com
피할 수 있을때 즐겨라! http://melotopia.net/b
a, b, c, m, n 을 알고
a, b, c, m, n 을 알고 있고, (m,n) 으로부터 d 만큼 떨어진 점 x', y' 를 계산하고 싶고 이 x', y' 도 ax+by+c = 0 직선 위에 있다고 한다면...
중간 값 정리를 이용해서 풀면 될 거 같습니다.
우선 x' = m/2 으로 잡구요. y' = -(ax'+c)/b = -(am/2+c)/b 가 되겠죠. 그 다음 (x'-m)^2+(y'-n)^2 을 계산해서 이 값이 d^2 보다 클 경우 x 를 m 쪽으로 조정시키고, d^2 보다 작을 경우 x 를 0 쪽으로 살짝 조절해주는 방법을 이용하면 됩니다.
pseudo code 로 나타내면 위와 같습니다.
--
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
가장 정확한 방법은
가장 정확한 방법은 (d,0)을 찍은 후 arctan(-a/b)만큼 회전시키고 m,n을 지나도록 평행이동하는 방법이 될 것 같군요.
나눗셈에 제곱근까지 들어가면 오차가 클 것 같아요.
--------------------------
snowall의 블로그입니다.
http://snowall.tistory.com
피할 수 있을때 즐겨라! http://melotopia.net/b
이것이 원하는 답 아닌가요?.
x' = d * cos(각도) + m;
y' = d * sin(각도) + n;
각도는 예각이니 -PI/2 ~ +PI/2 .
이게 젤 간단할 듯 하군요.
....
이 분 방법이 가장 오차가 작고 심플한 방법입니다 -_-ㅋ 탄젠트 값이 주어졌으니
----------------
agidari.wordpress.com
(m,n) 으로부터 거리가
(m,n) 으로부터 거리가 d인 점은
(m,n)을 중심으로 하고 반지름 d인 원위의 모든점이 되는데요..
무수히 많겠죠..
그럼 x',y' 도 직선위에 있어야하는건가요?
그렇다면 위의 원과 직선의 방정식을 연립해서 풀면되겠네요.
(x-m)^2+(y-n)^2 = d^2 --- (1)
ax+by+c=0 --- (2)
해가 두개 나올테고 이중에 원하시는놈을 골르세요
아니면 더 쉽게 윗분 말처럼 각도를 이용하시죠..
각도는 arctan(직선의기울기) 니깐 이걸 위의 분의 답에 대입하면 되겠네요.
아마 직선으로부터
아마 직선으로부터 d만큼 떨어진 점을 찾는 것이 원래 질문하신 분의 의도인 것 같은데요.
만약 직선 위에 있는 점이라면, 그냥 1차 연립 방정식으로도 풀립니다.
--------------------------
snowall의 블로그입니다.
http://snowall.tistory.com
피할 수 있을때 즐겨라! http://melotopia.net/b
아하 그렇군요..
아하 그렇군요.. 이제야 이해가가네요.. ㅠ.ㅠ
그럼 기울기를 직선과 수직하는 직선의 기울기로 하면되겠군요..
arctan(-1/직선의기울기)의 두 각도 중에 원하는 각 구해서 위의 식에 대입하면 되겠네요.
아마도 snowall 님이 제일 먼저 올리신 해답과 같아질것 같습니다.. ㅎㅎ
y' = bd/sqrt(a^2+b^2) +n x'
y' = bd/sqrt(a^2+b^2) +n
x' = ad/sqrt(a^2+b^2) +m
왜냐하면
(x',y') 와 (m,n)을 연결하는 직선의 방정식은 ay = b(x-m) + an
따라서 ay' = b(x'-m) + an
거리가 d 이므로 (x'-m)^2 + (y'-n)^2 = d^2
결국 ( (a/b)^2 + 1)(y'-n)^2 = d^2
그러므로 y'-n = sqrt( (b^2d^2)/(a^2 + b^2) )
말해질 수 있는 것은 분명하게 말해질 수 있다;
말할 수 없는 것에 대해서는 침묵해야한다.
논리철학논고 - 루드비히 비트겐슈타인
--
말할 수 있는 것은 분명하게 말해질 수 있다;
말해질 수 없는 것에 대해서는 침묵해야한다.
논리철학논고 - 루드비히 비트겐슈타인
농담입니다.
30cm 이내면 30cm자로 재어본다.
10m 이내라면 줄자로 재어본다.
100m 이상이라면 네이버지도 콤파스를 이용한다.
(^^;)
Hello World.
댓글 달기