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

How to join overlapping circles?












21
vote

問題

日本語

重なっている2つの円を視覚的に結合して

alttext

になります

Alt Text

私はすでに部分的な界のための方法を持っていますが、今、私はイカの円の重なり角度がどれくらい大きいかを知る必要があります、そして私はそれをする方法がわからない。

誰もが考えましたか?

英語

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

AltText

becomes

alt text

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
 
vote
vote
ベストアンサー
 

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

編集

他のサークルセンターから見た角度を望む場合は、最後の方程式でR1でR1を交換してください。

これは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]]

Alt Text

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

Alt Text

と...

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

Alt Text

:)

 

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

HTH!

Edit

For two different radii:

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

alt text

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

alt text

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] 

alt text

:)

</div
 
 
         
         
8
 
vote

今これはあなたのために100%うまく機能します figureもellipse 任意の数の数字

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

Alt Text

 

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      } 

alt text

</div
 
 
 
 
5
 
vote

今それを解決する時間がない。しかし、私はあなたがそれを取り出すために必要なものをあなたに与えます:

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

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

Alt Text

その後、点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.

alt text

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 ) 
私はOpenTKプロジェクトで2Dオブジェクトを回転させようとしています。 起動は、回転したオブジェクトの後のオブジェクトが回転していることで、それをしたくないことです。 既に1つのオブジェクトを回転させた後に回転をリセットするにはどうすればよいですか? <事...

2  カーボンレシーブexteventおよび二次ねじ  ( Carbon receivenextevent and secondary threads ) 
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 ) 
私のWPFアプリケーションのWindowsFormShostにOpenTk Glcontrol Embeddenを持っています。 継続的に更新してレンダリングしたいです。 WinFormsでは、解決策はUpdateAndrenderメソッドをApplicati...

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 のそれに隠され...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有