2010-12-16 1 views
21

시각적으로 중복되는 두 개의 원에 가입겹치는 서클에 가입하는 방법은 무엇입니까?</p> <p><img src="https://i.stack.imgur.com/5SqXU.jpg" alt="AltText"></p> <p>이가되도록 내가 원하는

alt text

이미 부분 원에 대한 방법을 가지고 있지만, 지금은 어떻게 크게 알 필요가 낙서 원에 대한 겹치는 각도가 있으며, 어떻게 해야할지 모르겠습니다.

누구나 아이디어가 있습니까?

+0

흠 좋은 임의의 수! 중심과 반경을 알고 있다면 원의 교차점을 찾을 수 있습니다. 거기에서 겹치는 부분을 알아낼 수 있어야합니다 - 교차점에 의해 생성 된 각 원의 두 세그먼트 중 작은 부분이 도움이됩니까? 나는 이것을 코딩하려고 시도한 적이 없지만 어쩌면 어떤 의사 코드를 시도 할 수있다. – FrustratedWithFormsDesigner

+0

원이 동일한 반경을 가지고 있는가? – Ishtar

+0

동그라미는 때때로 같은 방사상을 가질 수 있지만 일반적으로 동그라미는 아닙니다. –

답변

36

Phi= ArcTan[ Sqrt[4 * R^2 - d^2] /d ] 

HTH!

두 개의 서로 다른 반경 정보 편집

:

조금 단순화 :

Phi= ArcTan[Sqrt[-d^4 -(R1^2 - R2^2)^2 + 2*d^2*(R1^2 + R2^2)]/(d^2 +R1^2 -R2^2)] 

편집

,536,913,632 10

다른 원 중심에서 보는 각도를 원하면 마지막 방정식에서 R1을 R2로 바꿉니다.

f[center1_, d_, R1_, R2_] := Module[{Phi, Theta}, 

    Phi= ArcTan[Sqrt[-d^4-(R1^2-R2^2)^2 + 2*d^2*(R1^2 + R2^2)]/(d^2 +R1^2 -R2^2)] 

    Theta=ArcTan[Sqrt[-d^4-(R1^2-R2^2)^2 + 2*d^2*(R1^2 + R2^2)]/(d^2 -R1^2 +R2^2)] 

    {Circle[{center1, 0}, R1, {2 Pi - Phi, Phi}], 
    Circle[{d,  0}, R2, {Pi - Theta, -Pi + Theta}]} 

    ]; 
Graphics[f[0, 1.5, 1, 1]] 

alt text

Graphics[f[0, 1.5, 1, 3/4]] 

alt text

그리고 ...

ImageMultiply[ 
[email protected][#], 
ImageResize[[email protected] 
"http://i305.photobucket.com/albums/nn235/greeneyedgirlox/blondebabybunny.jpg", 
    [email protected]#]] &@ 
[email protected][f[0, 1.5, 1, 1], Background -> Black] 

0 : 여기

티카의 샘플 구현 1,236,673,841,483,

:

+2

두 반경이 반드시 동일하지는 않습니다. –

+0

@Ignacio 편집보기 –

+0

D와 뭐니? D는 어떻게받을 수 있습니까? 편집 중 어딘가에 떠 다니는 이유는 무엇입니까? –

5

지금 해결할 시간이 없어요. 그러나 나는 당신이 그것을 해결하기 위해 필요한 것을주지 : 사진에서

http://en.wikipedia.org/wiki/Triangle#The_sine.2C_cosine_and_tangent_rules

당신이 삼각형 A, B, C를 참조 위키 피 디아에. A를 왼쪽 원의 중심으로, B를 오른쪽 원의 중심으로 놓습니다. 그리고 AC는 왼쪽 원의 반경이고 BC는 오른쪽 원의 반경입니다.

alt text

는 그런 점 C는 최고 교차점이 될 것입니다. A, α의 모서리는 왼쪽 원의 각도의 절반입니다. b, β의 모서리는 오른쪽 원의 각도의 절반입니다. 이것들은 당신이 필요로하는 각도입니다, 맞죠?

위키 백과에서 더 자세히 설명합니다. '삼각형의 모든 세 변의 길이를 알고있는 경우 삼각을 계산할 수 있습니다.'

의사 코드 :

a=radius_a 
b=radius_b 
c=b_x - a_x 
alpha=arccos((b^2 + c^2 - a^2)/(2*b*c)) //from wikipedia 
left_angle=2*alpha 

행운을 빕니다 :)

8

지금이 심지어 그림은 타원당신을 위해 100 % 작동 수치

private void Form1_Paint(object sender, PaintEventArgs e) 
    { 
     Pen p = new Pen(Color.Red, 2);  

     Rectangle Fig1 = new Rectangle(50, 50, 100, 50); //dimensions of Fig1 
     Rectangle Fig2 = new Rectangle(100, 50, 100, 50); //dimensions of Fig2 
     . . . 

     DrawFigure(e.Graphics, p, Fig1); 
     DrawFigure(e.Graphics, p, Fig2); 
     . . . 

     //remember to call FillFigure after drawing all figures. 
     FillFigure(e.Graphics, p, Fig1); 
     FillFigure(e.Graphics, p, Fig2); 
     . . . 
    } 
    private void DrawFigure(Graphics g, Pen p, Rectangle r) 
    { 
     g.DrawEllipse(p, r.X, r.Y, r.Width, r.Height); 
    } 
    private void FillFigure(Graphics g, Pen p, Rectangle r) 
    { 
     g.FillEllipse(new SolidBrush(this.BackColor), r.X + p.Width, r.Y + p.Width, r.Width - 2 * +p.Width, r.Height - 2 * +p.Width);  //Adjusting Color so that it will leave border and fill 
    } 

alt text

+6

질문 및 의견을주의 깊게 읽지 않으셔서 감사합니다. OpenGL, NOT .net 드로잉으로 작업하고 있습니다. –

관련 문제