ベクトルを扱う関数は?

解決


小VB  2005-07-18 19:56:57  No: 123560  IP: [192.*.*.*]

はじめまして。
VB6でベクトルの演算を行いたいのですが、何かベクトル演算に関して
VBで用意されている関数というものがあるのでしょうか?

それとも一から全部作らないとだめなのでしょうか?

編集 削除
ガッ  2005-07-18 20:30:29  No: 123561  IP: [192.*.*.*]

はい。
外部ライブラリを使わずVB6だけで行おうとすれば、自力で組まなければならないと思います。

編集 削除
いな  2005-07-18 20:47:44  No: 123562  IP: [192.*.*.*]

ベクトルの演算
マウスの操作で、ベクトルの始点と終点が決まれば、
後はガリガリコーディングのような気がする。

一口にベクトル演算というけど、何を演算したいかにもよるけどさ。
GUI的な要素がある程度決まれば力技じゃないのかなぁ。
この手の数学系の解を求めるプログラムは・・・。と思うけど

#課題系のQA増えてきたな...ボソボソ

編集 削除
小VB  2005-07-19 00:33:03  No: 123563  IP: [192.*.*.*]

回答ありがとうございます。
外部ライブラリを使えば何かできるのでしょうか?
もう少し詳しくお願いします。

やりたいことは

x=A*Rx+B*Cx
y=A*Ry+B*Cy
z=A*Rz+B*Cz

でx,y,z、Rx,Ry,Rz、Cx,Cy,Czの値が与えられたとき
A,Bの値を求めることです。

編集 削除
通ってみた  2005-07-19 00:39:21  No: 123564  IP: [192.*.*.*]

A、B以外の値が与えられてて計算式があるのなら、そのまま当てはめて計算すればいいのでは・・・?

他に何が知りたいのだろうか

編集 削除
ガッ  2005-07-19 01:04:49  No: 123565  IP: [192.*.*.*]

X=(x  T(Rx Cx 0  K=(A
   y    Ry Cy 0     B
   z)   Rz Cz 0)    0)
とすると、X=T*K と等価になりそう…?(行列完全に忘れた…致命傷だ…)
まぁ多分なるだろうから、
このときT^-1(T inverse、以下T_)が存在して、それを両辺に左から掛けると
  T_*X=K  …α
となるか…
T_を求めるのには色々あるけど、
Tの型がM(3,3)なのでこの場合はサラスの方法を用いて|T|などを計算すれば楽かも。
で、T_そのものは、
・|T|が0でないならばT_:=Trans(CofactorOf(T))/|T|
  と定義されるはず(Transは転置、CofactorOfは余因子)。
・T_*T=Eなので、これを三元連立一次方程式として、
  解を求めるほうが簡単…?
後は、αにT_を代入するだけ、と。

…で、肝心のシステムなんだが…これはGoogle先生に…

※久々に行列やったのでメチャクチャ間違っているかもしれません…

編集 削除
いな  2005-07-19 01:45:56  No: 123566  IP: [192.*.*.*]

>外部ライブラリを使えば何かできるのでしょうか?
>もう少し詳しくお願いします。

ガッさんはさらっと流したけど^^;
そもそも、ベクトル演算の外部ライブラリってあるの?

#今日も徹夜、ガッさんも仲間?仲間?

編集 削除
ガッ  2005-07-19 01:57:05  No: 123567  IP: [192.*.*.*]

> いなさん
さらっとググってみたら、C(かC++)のライブラリ発見。
小VBさんが自力で組むのが面倒なら、フリーのコンパイラなりを探してDLL作るのがいいかな。
http://tinyurl.com/94mpx

…でも私が書いた方法ならわざわざ行列式を演算するライブラリなんて必要なく、
二次と三次のサラスの方法で良いような…??

> #今日も徹夜、ガッさんも仲間?仲間?
残念ですたなw  ('A`)
明日は1コマから……早く寝なあかんて>私

いなサーン!!( ゜)乂(゜ )ファイトーー!

ノシ

編集 削除
いな  2005-07-19 03:09:27  No: 123568  IP: [192.*.*.*]

このキーワードは思いつかなかったなぁ

http://hugeurl.com/?M2QxNzgwMjlmN2UyMWJhZTMyNzUzZjM5NmIwY2E1
NmYmNiZWbXBHWVZZeVNYaFdXR1JPVmxkb1ZsbFVSa3RYUmxsM1lVVk9WazFX
Y0ZaVmJYaHJWREZhYzFkcVFscGhNWEJvV1d0YVlXTnRUa1ZTYkdob1RWVndV
VmRXVWt0V01WcFhWMjVXVjJKSVFtOVpWRXA2WlVaa1dFMUlhRlJOVlRWSVZq
SjRjMVl5U2tsUmF6bGFWbnBHZFZwVldtdFdNV3cyVW14S2FWWllRa2hXUmxw
dlV6RmtTRk51VmxKaVYyaFlXVmQwUzJGR1VuTlhiWFJYVm1zMU1GUnNaSE5W
TVZwR1UxaHdWMkZyYkRSYVJFcEhWbXN4V1ZKc1RtaGhlbFpvVjFaU1MxVXha
RWRWYkZwWVltMVNXRlZ0ZUhkWGJHdDNWMnM1VmsxVmNGaFdNalYzVmpGS2RG
VnFUbGhXYlZKTFdsWmFUMk5zVm5OYVJtaFVVbFZ3Vmxac1pIZFVNVVY1VTFo
b1ZXSnJOVmRaVkU1RFZERnNjMVpVUmxkV2JIQjZXVlZvYTFack1WWldhbEpY
WWxoQ1dGWnNaRXRTTVdSeldrWldhRTFXYjNwV2JYaGhWREZhVjFOdVRsUmlS
MUpVVm0xNGQwNXNXbkpYYlhSclRWWndlVlJzVm10Vk1rWnpWMnhvVjAxSFVU
QldWVnBoWXpGa2MxZHRlRk5oZWxZMlZteGtNR1F4VW5OWGJGWnBVbFp3V1Zs
WGRIWk5SbHBJVFZWa2FrMVdjRlpWYlhoWFlWZEtXV0ZHYUZoaVJuQlhWRlph
WVdNeFpITldiRkpvVFRGS1dWWlhlR3ROUlRWSFYyeGtZVkpGU2xaWmJGWjNV
akZTVjJGRlpGZE5WbkJJVmpKNFExWnNXa1pYYkdoVllrWndWRmw2Um1Gak1X
UnlUbFUxVkZKVmNGaFdiRkpIVlRGSmVGWnVUbGhpUjFKWVdXMXpNVlpzV25G
VWEwNVhUVlpLZWxac1VrZFVNVnB6WTBad1dtRXhjRXhaVlZwaFl6RmtWVkpz
WkZOTk1taFpWbTB3ZUZZeVRuUlVhMlJYWWtaS1dGVnNXbmRWYkZwWVpFWmFi
Rkl3TVRSV1YzaHZZV3hLZEZWc1RscFhTRUo2Vm14YVlXTXlSa2xVYkZaT1Zt
NUNXVlp0TVhkWlZscElVMnRrVkdFelVsWldiWGhXVFZaV2MxZHJPVmhTTVZw
SFZHeGtiMkZXU25WUmExWlhZVEpSZDFaRVJtRmtSbHB6VjJzNVYySklRbGxX
YWtKdlVURlNSMWR1U2xkaWEzQnpWVzE0UjAweFdsaGpla1pvVm10d1ZsVnRO
VzlXTWtwSFUyeG9WMUpGY0VoV2FrWmhZMVphYzFadGJGTmlTRUpaVmpKNGEw
MUhVWGhYYkdSVllrWmFWRmxyVmt0V1JsWnpWV3RrYkdKR2NFaFhhMmhyVmpB
eFZsZHViRlZOVm5CVVZtcEdhMU5IVmtkUmJHUnBVbTVDV1ZaSE1UUlVNazE0
Vm01S2FsSlVWbGhXYTJRMFVqRmFjbGR0ZEU5U2JFb3dWVzAxVDFkSFJYZE9W
bVJYWWxoTmVGWnFSbmRXTVZwVlVtMTBVMDFXY0V0WFYzUlhUVVpaZUZOc1Zs
ZGhNazA1

編集 削除
ねろ  2005-07-19 08:21:59  No: 123569  IP: [192.*.*.*]

ん!  問題がなんか変だな。
ベクトル?  行列式?  複素数?

編集 削除
K.J.K.  2005-07-19 09:34:43  No: 123570  IP: [192.*.*.*]

> x=A*Rx+B*Cx
> y=A*Ry+B*Cy
> z=A*Rz+B*Cz

未知数が2個で方程式が3個だと、解が求まるとは限らないのでは?
それとも最小二乗法云々の話? 最小二乗法ならExcelを立ち上げて
LINEST関数を使うなりしてください。

編集 削除
マグ  2005-07-19 15:03:13  No: 123571  IP: [192.*.*.*]

>やりたいことは
>x=A*Rx+B*Cx
>y=A*Ry+B*Cy
>z=A*Rz+B*Cz
>でx,y,z、Rx,Ry,Rz、Cx,Cy,Czの値が与えられたとき
>A,Bの値を求めることです。

この問題からして、
x,y,z、Rx,Ry,Rz、Cx,Cy,Czの値が与えられたという条件ならば、
x=A*Rx+B*Cx
y=A*Ry+B*Cy
この2つの式で連立方程式を組めば、A、Bの値が出るんじゃないのかな?
と思ったのですが、違いますでしょうか?
的外れでしたら、すみません。

編集 削除
小VB  2005-07-19 18:40:31  No: 123572  IP: [192.*.*.*]

回答ありがとうございました。

紙と鉛筆で計算するのであれば答えは簡単にでるんですが
いざコンピュータで計算しようとすると
例えば(Rx,Ry,Rz)=(0,0,1),(Cx,Cy,Cz)=(0,1,0)の場合
まずz=A*Rz+B*Czの式からAを求め、次にy=A*Ry+B*CyからBを求める
といったようなことをしなければなりません。
このような手順をいろいろ場合わけせず簡単に解いてくれることが
できないものかとお尋ねしました。

みなさんのアドバイスを参考にもう少し調べてみます。

編集 削除
通ってみた  2005-07-19 18:47:44  No: 123573  IP: [192.*.*.*]

そのたったふたつの数式を書くのが大変なこと?

編集 削除
いな  2005-07-19 19:34:44  No: 123574  IP: [192.*.*.*]

紙と鉛筆で計算する時、z=A*Rz+B*Czの式からAを求め、
次にy=A*Ry+B*CyからBを求める
といったようなことをせず、
簡単に解けるのか?から検討しては?

紙と鉛筆でできなければ、プログラムでもできないです。

編集 削除
通りすがり  2005-07-20 13:54:33  No: 123575  IP: [192.*.*.*]

>みなさんのアドバイスを参考にもう少し調べてみます。

とりあえずご納得されたのなら、「解決」をチェックされるのが宜しいかと。

編集 削除
小VB  2005-07-21 01:21:31  No: 123576  IP: [192.*.*.*]

>通ってみたサン
ふたつの数式を書くのが大変なことではなく、パラメータにより
どの数式の組み合わせで解を導出するのかを決めるアルゴリズムを
作成するのが面倒(本音で言うとじゃまくさい)かなと思ったわけです。

>いなサン
簡単という言葉の使い方がちょっとまずかったです。
要するに解を導出するアルゴリズムをもった関数が用意されていて
それを使うだけでプログラムが書けるといった意味での簡単で
解を簡単に求めるアルゴリズムを検討するといった意味ではないです。

みなさんの回答より、そんな関数はなさそうな雰囲気なので自分で
作ることにします。

回答していただいたみなさん、ありがとうございました。

編集 削除
通ってみた  2005-07-21 07:00:33  No: 123577  IP: [192.*.*.*]

アルゴリズムの集合体がプログラムだと思うのだけど・・・それが邪魔だというのなら、プログラムなんか組まなけれb(ry

とりあえずFunction内でSelect Case辺り使えば楽だと思うけどとか言ってみる

編集 削除