# オーバーラップサークルに参加する方法 -- c# フィールド と math フィールド と opengl フィールド と geometry フィールド と opentk フィールド 関連 問題

## How to join overlapping circles?

21

### 問題

になります

I want to visually join two circles that are overlapping so that

becomes

I already have methods for partial circles, but now I need to know how large the overlapping angle for earch circle is, and I don't know how to do that.

Anyone got an Idea?

</div

## 回答リスト

36

ベストアンサー

<事前> <コード> Phi= ArcTan[ Sqrt[4 * R^2 - d^2] /d ]

hth！

edit

2つの異なる半径の場合：

<事前> <コード> Phi= ArcTan[Sqrt[-d^4 -(R1^2 - R2^2)^2 + 2*d^2*(R1^2 + R2^2)]/(d^2 +R1^2 -R2^2)]

これはMathematicaのサンプル実装です：

<事前> <コード> 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]]

<事前> <コード> Graphics[f[0, 1.5, 1, 3/4]]

と...

<事前> <コード> ImageMultiply[ Binarize@FillingTransform[#], ImageResize[Import@ "http://i305.photobucket.com/albums/nn235/greeneyedgirlox/blondebabybunny.jpg", ImageDimensions@#]] &@ Rasterize@Graphics[f[0, 1.5, 1, 1], Background -> Black]

:)

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

HTH!

Edit

Simplifying a little:

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

Edit

If you want the angle viewed from the other circle center, just exchange R1 by R2 in the last equation.

Here is a sample implementation in Mathematica:

``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]] ``

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

And...

``ImageMultiply[  Binarize@FillingTransform[#],   ImageResize[Import@  "http://i305.photobucket.com/albums/nn235/greeneyedgirlox/blondebabybunny.jpg",     ImageDimensions@#]] &@  Rasterize@Graphics[f[0, 1.5, 1, 1], Background -> Black] ``

:)

</div

8

<事前> <コード> cols1 <- c(1:16,18:19,21:23,25:26,30:33,35:36,38:39,41:42,44,46:47,49:54) cols2 <- c(62:85,87:90) cols3 <- c(91:142,149:161,55:61,163:170) # merge old / new data by row and add NA for unmatched rows dataold.adjust <- merge(data.old[,c(cols1,cols2,cols3)], data.new[,c(43:49,78)], by="row.names", all=TRUE) # put columns in desired order dataold.adjust <- dataold.adjust[,c(1:length(cols1), # 1st cols from dataold ncol(dataold.adjust)-length(43:49):1, # 1st cols from datanew (length(cols1)+1):length(cols2), # 2nd cols from dataold ncol(dataold.adjust), # 2nd cols from datanew (length(cols1)+length(cols2)+1):length(cols3))] # 3rd cols from dataold 0

Now this will work 100% for you even the figure is ellipse and any number of figures

``    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      } ``

</div

5

http://en.wikipedia.org/wiki/trianger#the_sine.2c_cosine_and_tangent_rules.

ウィキペディアの写真には、三角形A、B、Cが見えます。左円の中央に、B右円の中央になりましょう。そして、左円の半径と右円の半径。

その後、点Cは上部交差点になります。 a、αの角は左側の円の半分の角度である。b、β、右円の角の半分。これらはあなたが必要とする角度です、右？

ウィキペディアはさらに説明しています。 '三角形の3つの側面全ての長さがわかっている場合、3つの角度を計算することができます。'

<事前> <コード> 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

Don't have the time to solve it right now. But I'll give you what you need to work it out:

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

In the picture on wikipedia you see the triangle A,B,C. Let A be the center of the left circle, B the center of the right circle. And AC the radius of the left circle and BC the radius of the right circle.

Then point C would be the top intersection point. The corner in A, α, is half the angle in the left circle.The corner in b, β, half the angle in the right circle. These are the angles you need, right?

Wikipedia explains further: 'If the lengths of all three sides of any triangle are known the three angles can be calculated.'

Pseudocode:

``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 ``

Good luck :)

</div

## 関連する質問

1  OpenTK（OpenGL）ビットマップデータフォーマット問題  ( Opentkopengl bitmap data format problem )
opentkでビットマップデータを画面に印刷しようとしています。 <コード> GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, data.Width, data.Heig...

0  Opentkでブールユニフォーム  ( Boolean uniform in opentk )
bool 値をOpenTK経由でシェーダに渡すことができますか？ Unimul1のための過負荷を見たことがありません。私がfloat変数を使っていてのようなものをチェックするのを目的としている方法 <事前> <コード> imshow0 しかし、それは物事...

1  OpenTK - 2Dオブジェクトを回転させる方法  ( Opentk how to rotate a 2d object )

WinForms / GTK＃/ WPF / MONOMAC / etcに頼らずに独自のウィンドウを作成する必要があるクロスプラットフォームライブラリを想像してみてください（これは Opentk 。 これは、WindowsおよびX11対応のUnicesをサポ...

0  OpenTKウィンドウのサイズ変更中に再描画します  ( Opentk redrawing while window is resized )
OpenTKをグラフィックライブラリとして使用してプロジェクトを書いています。 OpenTK.GameWindow のサイズを変更すると、カーソルが解放されるまでフレームは更新されません。その結果、ビューポートの一部はクリップされています（小型化するとき...

1  テクスチャをレンダリングするスレッド  ( Background thread rendering a texture )
OpenTKを使ってC＃に単純なRaycasterを書いています。 私は自分のビューを60回更新することを望みますので、画面上のテクスチャを表示するTimer（）関数を呼び出します。 再帰関数を使用して、長方形のサイズが1pxまでそれを小さな長方形に分割して...

1  WPFのWindowsFormShostでOpenTK GLControlを継続的に更新します -  ( Continuously updating an opentk glcontrol in windowsformshost in wpf how )

3  OpenTKを使ったC＃のOpenGL UIライブラリ  ( Opengl ui library for c sharp with opentk )
OpenTKを使ってC＃にゲームエンジンを書いています、そして私はエンジンにUIのサポートを追加しようとしています。これをスクラッチから書くことは大きな頭痛のように見え、他の誰かが代わりにそれをするためにライブラリを作ったなら、それはたくさん速くなります。 ...

1  OpenTK - CubeMapアレイのストレージを割り当てる方法は？  ( Opentk how to allocate storage for a cubemap array )
CubeMap配列を作成する必要がありますが、正しいパラメータを見つけるのに問題があります。 サンプルコードの観点からはあまりありませんが、OpenGL：で、これを見つけました。 <事前> <コード> HiGL_TexStorage3D( GL_TE...

5  単体ゲームで基礎となるウィンドウを入手するにはどうすればいいですか？  ( How do i get the underlying window in monogame )
gleed2d をXNAからモノガームに変換しています。 gleed2dは XnaGame をインスタンス化する Windowsフォームアプリケーションです。 Game によって作成された window は、メインの Canvas のそれに隠され...