出産前後の痔にはご注意!

何度も質問させていただいて申し訳ないです。
教えてください。
VB6にて、中心点と始点の座標、弧の長さが与えられています。
中心点(488,-680)、始点(510,-682)、弧の長さが478というような
感じです。
弧の回転方向はこの場合は反時計周りです。
このような条件で終点となるX,Y座標を求める場合はどのような計算式
となるのでしょうか?
ご教授下さい。

A 回答 (4件)

>始点が(510,682)で中心点が(488,-639)です


始点、中心が変わっているのに 半径や回転角が変化していないのは変ですよね

最終的な加法定理で回転座標を求めるx,yだけ変えても意味がありませんよ

半径は1321.183になりますよね 回転角は0.36179となりますよ
最初の手順から確認してみましょう

それと 少し訂正ですが
Y座標を求める際に 最後で -680 としていますが 本来は + (-680)です
これは 終点を本来の位置に戻すための移動量です

一般式で書くと
x1 = x * cos(θ) - y * sin(θ) + Xo
y1 = x * sin(θ) + y * cos(θ) + Yo
x1,y1が回転後の座標
x,yが回転移動する前の点
Xo、Yoが中心への平行移動量
となります
    • good
    • 0

(1) 座標平行移動(中心点を原点とする座標に)


(2) 極座標に変換
(3) (弧長/半径)を角度として回転
(4) 直角座標に戻す (2)の逆
(5) 座標平行移動(1)の逆
の手順です。
    • good
    • 0

円弧の長さ=半径*角度(角度はただしラジアン)


という公式(というよりラジアンの概念定義)があったように思う。
ですから
1.半径を出す=中心点ー視点の距離 ピタゴラスの定理の応用で距離公式はでる。
2.割り算 角度=弧の長さ/半径
360度角度がいるなら、ラジアンー>角度変換(パイ値で割る)
質問するまでも無い課題では。
ーーー
ウイキから
定義から、扇形の中心角の大きさを θ ラジアン、半径を r とすると、その扇形の弧の長さ l と面積Sは l = rθ
    • good
    • 0

1)このデータから半径Rを求めます


2)円周の長さLを求めます
3)弧/円周が回転角になります
4)加法定理使って回転後の座標を求めます

Rは X成分の差の2乗とY成分の差の2乗の和の平方根
R = SQRT( (510-488)*(510-488) + (-682-(-680))*(-682-(-680))) )
 = SQRT( 22*22 + (-2)*(-2) )
 = 22.0907220343745
円周率PIは ATN(1)*4 で算出 ... 45度のアークタンジェント
円周長は2*PI*R
回転角は (478/(2*PI*R)) ... ラジアン
加法定理を使うために中心を(0,0)に移動したときの始点座標を求めます
(510-488, -682+680) = (22, -2) ... 原点へ移動したときの始点
x = 22 * cos( 回転角 ) - (-2) * sin( 回転角 ) + 488
y = 22 * sin( 回転角 ) + (-2) * cos( 回転角 ) - 680
となります

この回答への補足

ありがとうございます。
やってみたのですが、思った答えになってくれません。
チェックしていただけませんでしょうか?
始点が(510,682)で中心点が(488,-639)です。
で、上の式にあてはめてみました。
(510-488,682-(-639)) = (22,1321)となりました。
X = 22*cos(回転角=20.7) - (1321)*sin(20.7) +488
Y = 22*cos(20.7) +(1321)*cos(20.7) - (-639)
でよろしいでしょうか?
しかし、結果はX=-789,Y=-1759という答えになってしまいました。
おおよそですが、X=41 Y=605あたりになるはずなのですが、
どこが間違っているのでしょうか?
ご教授お願いします。

補足日時:2007/11/13 16:04
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q始点、終点の二つの座標と半径からの円弧の長さの求め方。

始点、終点の二つの座標と半径からの円弧の長さの求め方。
こんにちは。数学ずぶの素人です。
座標上に円弧があります。始点、終点の二つの座標と半径が分かっており、これらから円弧の長さを求めたいのですが計算方法が分かりません。
どなたか分かる方、ご教授ください。

Aベストアンサー

円弧の長さLは半径rと中心角θが分かれば、L=rθとして求められます。
中心角θは、始点と終点の距離をaとすると、sin(θ/2)=a/(2r)なので、
L=2r*arcsin(a/(2r))

2点間の距離は分かりますね。
sqrt((x1-x2)^2+(y1-y2)^2)

QX、Y座標上にある2点間の円弧の距離

X、Y座標上にある2点間の円弧での距離を求める方法を教えてください。
例:A点(5、10)、B点(10、5)とした場合のA、B間の円弧の距離はいくつになりますか?回答宜しくお願いします。

Aベストアンサー

回答は出ていますので考え方の補足まで、
原点(X,Y)=(0,0)とする円の方程式は(1)で与えられます。
X^2+Y^2=r^2 ・・(1)
与えられた2点は円弧の上にありますから
(X1,Y1)=(5,10)
(X2,Y2)=(10,5)
どちらかを代入すれば半径が得られます。
半径r=√(5^2+10^2)=√(125)
=5√5
命題は、与えられた2点間の円弧の長さを求める問題ですね。
そこで、円弧の2点と中心(0,0)を3点としてできる三角形を考えます。
当然,この三角形は二辺の長さ(円の半径)を(5√5)とする
二等辺三角形になります。
他の1辺の長さは、二点間の直線距離ですから
二点間の直線距離の式(2)を利用します。
(ピタゴラスの定理の変形を利用します。)
√{(X1-X2)^2+(Y1-Y2)^2}・・(2)
二点間の直線距離は、√((-5)^2+5^2)=√50=5√2
になります。これで3つの辺の長さがわかりました。
この二等辺三角形の頂角Θがわかれば円弧の長さが
わかります。
求め方(1)
そこで、二等辺三角形の頂点から垂線を引いて
同じ直角三角形を2個つくれば、
長辺が5√5、短辺が(5√2/2)の直角三角形ができます。
垂線の長さはピタゴラスの定理により
√{(5√5)^2-(5√2/2)^2}で求まります。
=√(125-50/4)=(5・3√2)/2
これから3辺の比が (√10:3:1)がわかります。
これから求める二等辺三角形の頂角Θは、
この三角形の頂角の2倍として、アークtanで表すと、
Θ=2×arctan(1/3)
となり、Θをラジアンにすれば円弧の長さは以下で求まります。
2πr×(2×arctan(1/3))/2π
=(5√5)×(2×arctan(1/3))
=(10√5)arctan(1/3)
ちなみに角度Θは、36.87度になります。
(角度での答えは#5さんにあります。)
求め方(2)
三角形の余弦定理を使う場合
角度Θの二辺A,Bに挟まれた一辺の長さCは以下の式です。
C^2=A^2+B^2-2ABcosΘ
これを使えば、二辺A=B=5√5、C=5√2ですので
50=250-250cosΘ, 50/250=0.20=1-cosΘ
cosΘ=0.8 からΘ=arccos(0.8) で出ます。
角度をラジアンにすれば
円弧の長さは以下で求まります。
2πr×(arccos(0.8))/2π
=(5√5)×(arccos(0.8))
以上 補足まで

回答は出ていますので考え方の補足まで、
原点(X,Y)=(0,0)とする円の方程式は(1)で与えられます。
X^2+Y^2=r^2 ・・(1)
与えられた2点は円弧の上にありますから
(X1,Y1)=(5,10)
(X2,Y2)=(10,5)
どちらかを代入すれば半径が得られます。
半径r=√(5^2+10^2)=√(125)
=5√5
命題は、与えられた2点間の円弧の長さを求める問題ですね。
そこで、円弧の2点と中心(0,0)を3点としてできる三角形を考えます。
当然,この三角形は二辺の長さ(円の半径)を(5√5)とする
二等辺三角形...続きを読む

Q円弧の始点、終点、回り角度から中心点を求める

円弧の始点座標、終点座標及び回り角度から円弧の中心点座標を求めることは可能でしょうか?
よろしくお願いいたします。

Aベストアンサー

中心の座標を変数において, 「2点までの距離が等しい」ことと, 2点を見込む角度がわかっていることから「内積の値が決まる」という方程式を立てれば求まると思います.

Q円周上の座標を求める方法を、具体的な数値を込みでお教えください

正円の半径と角度がわかっている状態で、円周上のx座標、y座標を求めることは可能でしょうか?
たとえば、半径=150の場合、0度なら(150,0)、90度なら(0,150)、180度なら(300,0)、270度なら(0,-150)
となりますが、1度、2度…といった、直角でない角度の場合にどのように遷移してゆくか、解りません。
0度から360度までの座標を追ってゆく必要があるのですが、お手上げ状態です。
三角関数で解けるとは思うのですが、高校時代の数学がさっぱりで、色々な本を読んでも計算方法が解りません。
ここの質問もいくつも目を通しましたが、πやラジアンが具体的にどんな数値なのか…が判然としなくて、解けないのです。

もし、噛み砕いて解説可能なかた、いらっしゃいましたらお教えいただけますと助かります。
何卒、よろしくお願い申し上げます。

Aベストアンサー

#2です。

> どうしてもsin,cosでやるなら、自分で360度分、ファイルかなにかで持つべき・・・になりそうですね。

それが良いと思います。
どれくらいの精度が必要なのかと、容量との兼ね合いで、3600個(0.1度刻み)になるのか、360個(1度刻み)になるのか、72個(5度刻み)になるのかが決まると思いますけど。

sinとcosには、cosθ=sin(θ+90°) ⇔ sinθ=cos(θ-90°) という関係があります。
これを利用すれば、sin用のデータかcos用のデータのどちらか一方を用意するだけで、sinの値もcosの値も求めることができます。
用意するデータは 0°≦θ<360°の範囲内だけだと思うので、角度の計算結果がそこから外れた場合は、360°を足すか引くかして、範囲内に補正する必要があります。

頑張ってください。

Qvb.netで画面のコントロールId名を変数で動的に制御し処理する方法

以下のような処理がしたいです。
実現方法をご存知でしたらご教授下さい。

画面のコントロールText1~Text3があります。
For~Nextでこのコントロールに値をセットしたいです。

For i = 1 To 3
  Texti.Text = i
  ※このiのTextの後ろのiの部分を1~3と動的に変更し、各Textに値を設定したいです。
Next

Aベストアンサー

こんにちは、webでは、findcontrolを使うみたいです。

いかに、参考URLから、引用すると
***********************************
Dim L, U, i As Integer
Dim tx As System.Web.UI.WebControls.TextBox
L = LBound(dat)
U = UBound(dat)
For i = L To U
'コントロール名を探し出す
tx = FindControl("TextBox" & CStr(i))
'見つかったコントロールのTextプロパティに代入
tx.Text = dat(i)
Next

******************引用終わり*******
このようにすると良いみたいです。
asp findcontrolで、検索すると、
結構ヒットするみたいです。

参考URL:http://natchan-develop.seesaa.net/

Q弧の長さから角度を取得するには。

度々お聞きします<(_ _)>
すいません、タイトル間違ってました。
座標を取得ではなく、角度です。

VB6にてCADデータを作成しております。
弧の長さから角度を取得したいのですが、躓いてます。
弧 = (2 * 3.14 * R) * ((終点角度 - 始点角度) / 360)
弧 = 弧 - 指定距離
既存の弧の長さを取得し、そこから指定された長さを引いて、
目的とする長さ(再描画)を得られました。
しかし、ここから、さらに、終点角度を再計算する必要があります。
始点はそのままで終点の角度が変わるはずです。
この場合、終点を求めるにはどのようにすればよいでしょうか?
アドバイスよろしくお願いします。

Aベストアンサー

単に数式を変形すれば出来ると思いますよ
弧 = 2πR * (終了角 - 開始角)/360
なのですから
両辺に 360/ 2πR を掛ける
(終了角 - 開始角) = 弧 * 360 / 2πR

両辺に 開始角を加算する
終了角 = (弧 * 360 / 2πR) + 開始角
といった変形です

Q円弧の描画について

エクセルのワークシート上に2点(x1,y1)、(x2,y2)の座標があり、半径がrと決まっている場合に、(x1,y1)を始点、(x2,y2)を終点とする半径rの円弧を描きたいのですが、VBAで教えていただけますでしょうか?

例えばエクセルのワークシート上に2点(600,400)と(500,300)という座標があります。この座標は、

Dim ShapeA As Shape, ShapeB As Shape

Set ShapeA = ActiveSheet.Shapes.AddShape _
(msoShapeOval, 600, 400, 2, 2)
Set ShapeB = ActiveSheet.Shapes.AddShape _
(msoShapeOval, 500, 300, 2, 2)

というコードでワークシート上に描いています。

この2点をそれぞれ始点、終点として、半径100の円弧を描く方法を考えているのですが、
VBA初心者の為、困っています。VBAで円弧を描く方法がありましたら是非教えていただきたく
お願い致します。

よろしくお願い致します。

エクセルのワークシート上に2点(x1,y1)、(x2,y2)の座標があり、半径がrと決まっている場合に、(x1,y1)を始点、(x2,y2)を終点とする半径rの円弧を描きたいのですが、VBAで教えていただけますでしょうか?

例えばエクセルのワークシート上に2点(600,400)と(500,300)という座標があります。この座標は、

Dim ShapeA As Shape, ShapeB As Shape

Set ShapeA = ActiveSheet.Shapes.AddShape _
(msoShapeOval, 600, 400, 2, 2)
Set ShapeB = ActiveSheet.Shapes.AddShape _
(msoShapeOval, 500, 300, 2, 2)
...続きを読む

Aベストアンサー

私なりにやってみて以下報告します。ただし、私には判らない点は残ったままですが。
ーー
エクセルのオートシェイプで基本図形に円弧(Arc)があります。
Shiftキーを押しつつ書くと真円の1/4円弧がかかれるようです。
そこで右下の黄色い小○点を上に引き上げると、1/4円でなく円の一部になるようです。
マクロの記録をとると
Sub Macro1()
ActiveSheet.Shapes.AddShape(msoShapeArc, 200, 200, 300, 300).Select
Selection.ShapeRange.Adjustments.Item(2) = 54.9544
End Sub
などのようになります。
300,300はHeight、Widthの値で、1/4円の場合は半径に当たるので、半径を指定すればよいと思う(*1)。
「そこで黄色い小○点を上に引き上げる」操作が、Adjustments
にたると思います(*2)
そして左上黄色小○点を動かすと
Selection.ShapeRange.Adjustments.Item(1) = 76.017
とItem(1)になるところから、Item(1)が左上黄色小○点、Item(2)が右下黄色小○点を左右するものと思います(*3)
この数値を決めると任意の円弧をワークシート上に描けると思われます。
(ただし、下手に図形のサイズを変えると、図形がゆがんで円弧でなくなります。黄色小○点を掴んで端点を動かすことです。)
ーー
>、(x1,y1)を始点、(x2,y2)を終点とする場合どう計算するか
は勉強してみてください。
ーー
*1-*3が私には断言できるか100%は自信の無いところです。
ーー
そして同じようなことを考えた
http://park7.wakwak.com/~efc21/cgi-bin/exqalounge.cgi?print+200701/07010035.txt
がありました。
「Adjustments.Item VBA」でWEB照会すると、予想外の結構の数の記事があるようです。調べてみてください。
ーー
微少直線で円を書くこともやってみましたが、微少直線1つ1つが独立した線(オブジェクト)で、グループ化などがややこしくて、考えるのをやめました。
参考
円弧を描く
Sub test03()
Worksheets("sheet1").DrawingObjects.Delete
r = 300
mx = 100
l = 400
my = l - Sqr(r ^ 2 - mx ^ 2)
For x = 100 To 250 Step 1
y = l - Sqr(r ^ 2 - x ^ 2)
ActiveSheet.Shapes.AddLine mx, my, x, y
mx = x
my = y
Next
End Sub
ーー
何かの参考になれば。

私なりにやってみて以下報告します。ただし、私には判らない点は残ったままですが。
ーー
エクセルのオートシェイプで基本図形に円弧(Arc)があります。
Shiftキーを押しつつ書くと真円の1/4円弧がかかれるようです。
そこで右下の黄色い小○点を上に引き上げると、1/4円でなく円の一部になるようです。
マクロの記録をとると
Sub Macro1()
ActiveSheet.Shapes.AddShape(msoShapeArc, 200, 200, 300, 300).Select
Selection.ShapeRange.Adjustments.Item(2) = 54.9544
End Sub
など...続きを読む

QExcelのマクロを使用してオートシェイプ図形の色を変えたいのです。

Excelのマクロを使用してオートシェイプ図形の色を変えたいのです。

オートシェイプ図形を50個ならべて、マウスでクリックしてものは色が変わるようにしたいと思います。
マクロ記録をすると以下のようになりました。
Sub Macro1()
ActiveSheet.Shapes("AutoShape 1").Select
Selection.ShapeRange.Fill.ForeColor.SchemeColor = 45
Selection.ShapeRange.Fill.Visible = msoTrue
Selection.ShapeRange.Fill.Solid
End Sub

このプログラムを50個書くわけにはいかないのですが、プログラムで処理するのに問題点が2つ出てきました。

・オートシェイプ図形の名前が"AutoShape 1"となっていますが、これを変更したいのですが、書式設定にはありませんでした。変更するにはどうすればよいのでしょう?

・クリックしたオートシェイプ図形がどれであるかを返す関数がないと、どの図形がクリックされたかわからないのですが、これを返す関数はあるのでしょうか?

よろしくお願いします。

Excelのマクロを使用してオートシェイプ図形の色を変えたいのです。

オートシェイプ図形を50個ならべて、マウスでクリックしてものは色が変わるようにしたいと思います。
マクロ記録をすると以下のようになりました。
Sub Macro1()
ActiveSheet.Shapes("AutoShape 1").Select
Selection.ShapeRange.Fill.ForeColor.SchemeColor = 45
Selection.ShapeRange.Fill.Visible = msoTrue
Selection.ShapeRange.Fill.Solid
End Sub

このプログラムを50個書くわけにはいかないのですが、プログラムで...続きを読む

Aベストアンサー

質問者さんが何をなさりたいのかによって、答えが全く変わってきますが (^_^)

50ある図形の一部について色を変えたい、その手間を省きたい
ということなら F4 キーで繰り返し処理ができます。


手間がかかってもよいから、ご質問の通り動くプログラムを作りたい
ということなら、

> オートシェイプ図形の名前が"AutoShape 1"となっていますが、これを変更したい
  Worksheets("シート名").Shapes("シェイプ名").Name = "あなたの好きな名前"

で変えられます。

ちなみにエクセルが自動でつけてくれた名前を知るには

Sub List()
Dim シェイプ As Shape
  For Each シェイプ In Worksheets("Sheet1").Shapes
    Debug.Print シェイプ.TopLeftCell.Address; " "; シェイプ.Name
  Next
End Sub

などとすればよろしいかと思います。こうすればセル位置で確認できます。
なおここで表示される名前は右端に半角空白を一つあけて連番がついているようです。


> ・クリックしたオートシェイプ図形がどれであるかを返す関数
ありません。但し、その関数を自分で作ることはできます。
例えばこんな感じです

Sub Shapeの色を変える()
  With Worksheets("Sheet1").Shapes(Application.Caller)
    .Fill.ForeColor.RGB = RGB(255, 0, 0)
    .Line.ForeColor.RGB = RGB(0, 255, 0)
  End With
End Sub

で、その自作関数を図形にリンクしてやる方法は
  図形を右クリックして 『マクロの登録』 で登録するか
  シェイプ.OnAction プロパティにそのマクロ名を文字列でセットしてやる
試してみましたが、この自作関数はモジュール上に書く必要があるようです。
それと、もちろんですが、50の図形全部についてマクロの登録がひつようです。
マクロを使って登録してもよろしい。
但し、シートにコマンドボタンがあるときは除外しないとエラーになります。

Sub btnShape_Click()
  Dim Shp0 As Shape
  For Each Shp0 In Worksheets("Sheet1").Shapes
    Shp0.OnAction = "Shapeの色を変える"
  Next
End Sub

質問者さんが何をなさりたいのかによって、答えが全く変わってきますが (^_^)

50ある図形の一部について色を変えたい、その手間を省きたい
ということなら F4 キーで繰り返し処理ができます。


手間がかかってもよいから、ご質問の通り動くプログラムを作りたい
ということなら、

> オートシェイプ図形の名前が"AutoShape 1"となっていますが、これを変更したい
  Worksheets("シート名").Shapes("シェイプ名").Name = "あなたの好きな名前"

で変えられます。

ちなみにエクセルが自動でつけてく...続きを読む

Qタンジェントのマイナス1乗について

タンジェントのマイナス1乗を確かアークタンジェントっていうのだと記憶の片隅にあるのですがこれをエクセルで計算するにはどうしたらよいのでしょうか?

ちなみにtan^-1(0.00292)=0°10’
になるようなのですが・・・

理系の大学出ていながらホント情けないです。

どうか知恵を貸してください。
よろしくお願いします。

Aベストアンサー

アークタンジェントはATAN関数を使います。
ATAN関数は戻り値がラジアンですから、これを「度」単位に換算する必要があり、
その関数はDEGREESです。

ですから例えばA1に0.00292と入っていて、B1に答えを出したいときは、B1に
「=DEGREES(ATAN(A1))」とすれば出てきます。
ちなみに手元のExcelでやってみたら答えが0.167303となりました。
0.167303度ということは大体「0°10’」くらいかと思われます。

Q二点の座標から角度を求めるには?

2点の座標A,Bの角度を求めたいのですが,たとえばA点(0,0)とB点(4,3)を結ぶラインは、底辺Bxと高さByを元に三角関数?から30度と求められますが、B点がマイナス座標が絡んできた場合などの90度から359度までをどう求めていいか悩んでいます。また、A点も(0,0)に限定されるわけではないので、ますます混乱しています。どう考えればよいのか教えていただきたいのですが
(水平はX軸プラス方向が0度です)

Aベストアンサー

>2点の座標A,Bの角度を求めたい~・・・・

このままなら答えは0ですけど?

xy座標で、x軸のプラス方向を0度とし、
2点の座標A、Bにより形成される線ABとx軸との角度
ってことですね。

>たとえばA点(0,0)とB点(4,3)を結ぶラインは、底辺Bxと高さByを
>元に三角関数?から30度と求められますが、

sen-senさんの書かれたとおり、これは間違いです。
この場合、Bからx軸へのばした垂線とx軸との交点をCとすると、
三角形ABCができ、そのときの求めたい角度をθとすると、
tanθ=3/4となります。
よって、θ=36.8698...
となります。

>B点がマイナス座標が絡んできた場合などの90度から359度までを
>どう求めていいか悩んでいます。また、A点も(0,0)に限定される
>わけではないので、ますます混乱しています。
>(水平はX軸プラス方向が0度です)

常にx軸のプラス方向が0度でしたら、
1.第一象限にある場合は90度足す。
2.第二象限にある場合はそのまま。
3.第三象限にある場合は270度足す。
4.第四象限にある場合は180度足す。
とすればいいのでは?

簡単な例として、x軸と点A(0,5)と点B(-3,7)によって形成される
線ABとの間の角度は・・・・

まず、図を描いてみると点Bは第一象限にあるので、
最後に求めた角度に90度足せばいいだけです。
さっきと同じように直角三角形を作成します。
すると点Cの座標は(0,7)となります。
辺ABと辺ACとの間の角度は、tanθ=3/2
θ=56.3
以上より、x軸(に水平な線)と線ABとの間の角度は146.3度となります。

こんな感じでいいのでは?

>2点の座標A,Bの角度を求めたい~・・・・

このままなら答えは0ですけど?

xy座標で、x軸のプラス方向を0度とし、
2点の座標A、Bにより形成される線ABとx軸との角度
ってことですね。

>たとえばA点(0,0)とB点(4,3)を結ぶラインは、底辺Bxと高さByを
>元に三角関数?から30度と求められますが、

sen-senさんの書かれたとおり、これは間違いです。
この場合、Bからx軸へのばした垂線とx軸との交点をCとすると、
三角形ABCができ、そのときの求めたい角度をθとすると、
tanθ=3/4...続きを読む


人気Q&Aランキング