[질문] 기하학 계산...

taroo의 이미지


바깥 원 중심인 O, 안쪽 원 중심인 P가 있습니다.
안쪽 원 중심의 반지름은 R이고, 바깥 원 중심은 L입니다.
바깥원의 어떤 각(0~360도)를 회전하는 선분 L과 안쪽 원의 원호가 맞닿은 부분으로부터 안쪽 원의 중심에 이은 선분 R이 있습니다.
이 때 어떤 각 a는 알고 있습니다. 그러나 P점에서 R의 각은 모릅니다.
R의 각 ?는 어떻게 구할 수 있을까요?

덧붙여, 알고 있는 값은 L, R, K, a입니다.

이것 때문에 벌써 다섯 시간 째 고민 중입니다. ㅠ.ㅠ
바보인가봐요... :oops:

lobsterman의 이미지

디바이더와 분도계를 이용하세요....제일 빨라요...

시뮬레이팅(?)을 해보는거지요...

무한한 상상력과 강한실행욕구는 엔지니어의 마지막 무기~

맹고이의 이미지

고등학교때 저런거 많이 풀었었는데, 지금은... ㅠ_ㅠ

stannum의 이미지

Let cos(?) be X

그럼 이 2차 방정식을 풀어 코사인 값을 구한다음 역함수를 추적하면 ?의 근사값이 나옵니다.

R^2*X^2 - 2KR(sinA)^2*X+(sinA)^2*(K^2+R^2)-R^2=0

clapton의 이미지

님께서 어느정도 수준의 일반화를 원하시는지 잘 모르겠지만
다음과 같이 한번 접근해보심이...

점 O를 원점으로 하는 x, y축을 그립니다. 그러면 점 O를 원점으로
각 a만큼 벌어진 부채꼴의 좌표는 (Lcos(a), Lsin(a))가 됩니다.
똑같은 방식으로 P를 중심으로 ?만큼 벌어진 부채꼴의 좌표는
(Rcos(?) + k, Rsin(?)) 이 됩니다.

그러면 이제 2개의 삼각형을 생각해봅니다.

큰 삼각형은 (0,0), (Lcos(a), Lsin(a)), (Lcos(a), 0) 를 세 점으로 가지고
작은 삼각형은 (0,0), (Rcos(?) + k, Rsin(?)), (Rcos(?) + k, 0)를 세 점으로
가집니다. 그리고 이 두 삼각형은 닮음입니다.

닮음의 비는

Rcos(?) + k : Lcos(a) = Rsin(?) : Lsin(a)

입니다. 위의 식을 풀어서 쓰면

LRsin(a)cos(?) + kLsin(a) = LRsin(?)cos(a)

이고 이를 다시 풀어서 쓰면

KLsin(a) = LR(sin(?)cos(a) - sin(a)cos(?))

입니다. 양변의 LR로 나누면 결국

sin(?)cos(a) - sin(a)cos(?) = K/R * sin(a)

입니다.

사인에 대한 덧셈정리를 적용하면

sin(? - a) = K/R *sin(a)

까지는 정리할 수 있습니다. 여기서 a, K, R이 고정된 값이라고 하셨으니
? 값은 구할 수 있지 않을까 합니다.

sliver의 이미지

먼저 R와 L의 교점을 M이라 하고
M에서 직선OP로 수선을 내려서 생긴 점을 N이라 하고,
또 모르는 각을 b라고 하면요..

MN = Rsin(b), PN = Rcos(b)

ON = OP + PN = K + Rcos(b)

ON * tan(a) = MN 이므로

(K+Rcos(b))*tan(a) = Rsin(b)

sin(b) = x, cos(b) = root(1-x^2)로 두고(0 <= b <= 90이라 가정)

잘 정리하면 x에 대한 2차식이 나옵니다.

2차방정식 해 구하는 법으로 해 구하신 후, arcsin 씌우시면 됩니다-_-ㅋ

byte의 이미지

.

sangwoo의 이미지

saintmajor wrote:
너무나도 이상한 풀이인데요-_-

L은 이용도 안하고; 제가 생각해도 황당한 풀이네요..

잘못된거 같기도 한데, 어디가잘못된지를 모르겠어요~

어디가 잘못된 건지 지적부탁드려요^^;;

L의 값은 상관이 없습니다. 작은 원과 나머지 K, R, a 만 있어도 b는 결정됩니다.. ;)
(바깥의 원을 지우고 생각해 보면 알 수 있습니다.)
즉, 올바른 풀이법이라고 생각됩니다. 다만 그런 식으로 풀때 수식을 정리하는게 쉽지가 않은게 문제죠.. -_-

답은 clapton님께서 말씀하신 대로 arcsin(K/R * sin a) + a 가 아닐까 싶습니다.
(단 a < pi/2 일 경우.. 그 외의 경우는 아직 잘 모르겠군요)

(수정) 0 < a < pi 일 때는 위의 식이 성립하는 것 같습니다 ^^

----
Let's shut up and code.

sliver의 이미지

saintmajor wrote:
너무나도 이상한 풀이인데요-_-

K, R, a 를 제2코사인 법칙을 이용해서

나머지 변 하나를 구하구요(L 의 일부분인..)

이제 K, R, 구한 나머지변을 이용해서

? 각의 옆에 있는 각을 구해서

180에서 빼면 나오지 않나요?;;;

L은 이용도 안하고; 제가 생각해도 황당한 풀이네요..

잘못된거 같기도 한데, 어디가잘못된지를 모르겠어요~

어디가 잘못된 건지 지적부탁드려요^^;;


맞는거 같은데요..
그림을 잘 보시면, L(원 O의 반지름)이 커지든 작아지든 ?각에는
영향이 없는 걸 아실 수 있어요 :)
byte의 이미지

.

taroo의 이미지

ㅡ,.ㅡ; 한 발 늦었군요!
그래도 고맙습니다~
헌데... 너무 고민했더니.. 이런 내용으로 코딩을 못하겠군요. ㅠ.ㅠ
머리가 안돌아가요.. ㅡ,.ㅡ;;;
역시... 바보였던가...

liberta의 이미지

((이런, 자려고 불껐는데 문득 눈에 띄어서.. ㅡㅡ; )

알려져 있는 두 길이 k, R 그리고 한 각 a만 있으면 미지각 b를 구할수 있겠네요.

그림을 참고해서,

i) 큰 원의 반지름 L의 함수식은 y = tan(a)*x

ii) 작은 원 위에 있는 R의 끝 점의 좌표는 (k + R*cos(b), R*sin(b))

iii) i)의 직선이 ii)의 좌표를 지나므로, R*sin(b) = tan(a)*[k + R*cos(b)]

iv) 항등식 sin(b)*sin(b) + cos(b)*cos(b) = 1 을 이용하거나, 아님 수치적으로,
0 < b < M_PI/2 구간에서 FUNC(b) = tan(a)*[k + R*cos(b)] - R*sin(b) = 0
함수에 대한 bisection 알고리즘 정도 돌리면 b 나옵니다 :-)

(FUNC(b)는 단조감소죠?)

idlock의 이미지

taroo의 이미지

바깥의 원은 앞서도 말씀드렸듯이..

Quote:
바깥원의 어떤 각(0~360도)를 회전하는 선분 L과 안쪽 원의 원호가 맞닿은 부분으로부터 안쪽 원의 중심에 이은 선분 R이 있습니다.

선분 L은 360도 회전하게 됩니다. 즉 선분 L의 각 a는 0~360도 중 임의의 값을 갖게 됩니다. 임의의 값이라고는 하지만, 0도일 때 원점 O로부터 L과 R의 교점까지의 거리, 1도일 때 원점 O로부터 L과 R의 교점까지의 거리, ... 등으로 결정되기 때문에 a각은 결정된 값이라고 했습니다.
지금 거리라고만 했는데 이 거리만 알아도 상관이 없습니다. 즉 ?각도를 알 필요까지는 없다는 것입니다.

제 2코사인 법칙을 사용해서 수식을 푸는 것도.. 약간 무리가 있더군요.. 아마도 제가 바보라서 그런 것 같습니다.

L의 직선과 P를 원점으로 하는 원의 방정식을 이용한 방법도 써봤는데 a각도가 0도~360도의 모든 각에 대한 ?각도나 O점으로부터 교점까지의 거리를 구하는 것도 tan a할 때 a각도가 90도와 270도에서 문제가 생겼습니다.

또 다른 방법도 있었는데.. 뭐라 설명드리기 어려운.. 어쨌든 각도 a가 360도를 모두 고려하기 때문에 계속 실패되더군요.

어찌해야할지.. 벌써 몇 일 째입니다. ^^;

onemind555의 이미지

원2개는 문제를 푸는데 아무런 실마리를 주기 못하고..
그러면 4개의 값을 이용해서 풀어야 하잖아요...
L값은 아무 도움이 안 되고.
나머지 3개의 값으로 각도를 구하는건 불가능 한거 아닌가요...

-----------^^ ^^ ^^ ^^ ^^ ----------
..........................................................

onemind555의 이미지

삼각 공식 그러는데 다른 각도에서 한번 보면...

2개의 원의 반지름을 알고 있고,
중심간의 거리를 알고 있습니다..
그리고 큰원의 중심을 포함 하는 직선이 몇도의 각도로 작은원을 지나고 있네요..

위의 3가지 사실로 큰원의 중심을 몇도의 각도로 지나는 작은원의 한점을
구해 버리면 문제 다푼거나 마찬가지죠.. 삼각 공식 같은것은 쓰이지도 않습니다..

그 구한 한점과 작은원 중심의 직선을 구해 각도 계산 하면 끝...

의외로 쉬운 문제...ㅋㅋㅋㅋㅋㅋ
(직선과 원의 교차점 구하는 문제죠.. )
삼각형 그려 놓은건 훼이크 입니다.. 훼이크에 속으 신듯...

-----------^^ ^^ ^^ ^^ ^^ ----------
..........................................................

taroo의 이미지

Quote:
2개의 원의 반지름을 알고 있고,
중심간의 거리를 알고 있습니다..
그리고 큰원의 중심을 포함 하는 직선이 몇도의 각도로 작은원을 지나고 있네요..
위의 3가지 사실로 큰원의 중심을 몇도의 각도로 지나는 작은원의 한점을
구해 버리면 문제 다푼거나 마찬가지죠.. 삼각 공식 같은것은 쓰이지도 않습니다..

원의 방정식 R^2 = x^2 + y^2
L의 직선 방정식 y = tan(a)x
두 식을 연립방정식으로 풀면 되리라는 생각도 해보았습니다만, L 직선 방정식의 기울기인 tan(a) 때문에 문제가 생깁니다. 각 a는 0~360도까지 회전하는데, 각각의 기울기에 따라서 모든 교점을 찾을 수 없다는게 문제입니다.
tan(PI/2)와 tan(3*PI/2)일 때 문제가 생기지요. 이 때의 tan값은 무한대입니다. 즉 값을 알 수가 없죠. 그러면 교점도 못 찾는게 됩니다.
taroo의 이미지

위에서 원의 방정식은 R^2 = (x-k)^2 + y^2이 되어야 했는데, 잘못 썼었습니다.

onemind555의 이미지

0 도 90도 180 도 360도 4가지 경우 인걸로 아는데
이 네가지 경우에는 다른 방법으로 계산 해야 겠죠..
수직 수평 직선이니 구하는 방법은 설명 안 해도 알 겠죠....

만약 이걸 플밍으로 작성 해야 한다면 if나 switch로 분기문을 만들어야 합니다..

-----------^^ ^^ ^^ ^^ ^^ ----------
..........................................................