質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

4回答

788閲覧

関数から(x,y,z)座標をそれぞれ取り出したい

YUKINON

総合スコア23

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/07/04 10:33

C++

1//元のソースコード 2int main(){ 3//////////////////////////////////////////////////////// 4 std::vector<float> position{ 0,0,0,0 }; 5 std::vector<float> a_predicted{ 0,0,0 }; 6    Mat xyz; 7 position[0] = -1 * xyz.at<double>(0, 0);//x 8 position[1] = -1 * xyz.at<double>(1, 0);//y 9 position[2] = xyz.at<double>(2, 0) + 100;//z 10 a_predicted[0] = position[0]; 11 a_predicted[1] = position[1]; 12 a_predicted[2] = position[2]; 13//////////////////////////////////////////////////////// 14} 15 16//新しいソースコード 17 //関数化 18 vector<float> Restore(Mat xyz) { 19 std::vector<float> position{ 0,0,0,0 }; 20 position[0] = -1 * xyz.at<double>(0, 0);//x 21 position[1] = -1 * xyz.at<double>(1, 0);//y 22 position[2] = xyz.at<double>(2, 0) + 100;//z 23 24 return position; 25 }; 26 27int main(){ 28/////////////////////////////////////////////////////// 29    std::vector<float> a_predicted{ 0,0,0 }; 30 Mat xyz; 31 Restore(Mat xyz); 32 a_predicted[0] = ???; 33 a_predicted[1] = ???; 34 a_predicted[2] = ???; 35/////////////////////////////////////////////////////// 36};

元のソースコードで逐次行っていた処理を,関数Restoreを使って書き直したいです.
新しいソースコードでは,a_predicted[]にはどのようにしてpositionの値を入れればいいのかご教授お願い致します.

理想としましては↓
a_predicted[0] = Restore(Mat xyz).at<double>(0, 0)
のような形にしたいのですが,良い書き方が見つかりません

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t_obara

2019/07/04 14:50

> a_predicted[0] = Restore(Mat xyz).at<double>(0, 0) これだと、毎回無駄にposition配列に入れ、一つしか参照しないですよね。 a_predicted[0] = Restore(const Mat & xyz, 0); じゃダメなの?
guest

回答4

0

c++

1std::vector<float> a_predicted = Restore(xyz);

投稿2019/07/04 11:40

asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YUKINON

2019/07/04 13:39

回答有り難うございます. 配列ごとに格納したいです
fana

2019/07/05 01:29

これだと a_predictedが4要素になってしまい,意図とは異なるような気がします.
guest

0

全く別の回答になりますが、3次元の座標と次元数を固定してしまう場合は、構造体にしてしまうのが一般的ですよ。この方法なら関数を用意していちいち置きなおす処理など必要ありません。

struct Vector3 { public: union { struct { float x; float y; float z; }; float v[3]; }; };

投稿2019/07/05 05:13

stdio

総合スコア3307

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

関数Restoreを使って

→提示されたRestore()はそのまま使う前提だと解釈.

Restore()の戻り値をちゃんと受け取って,a_predictedに必要な要素をコピーします.
(書き方に関してはいろいろあるでしょうけど,原始的(?)には,こうでしょう.)

std::vector<float> Position = Restore(Mat xyz); a_predicted[0] = Position[0]; a_predicted[1] = Position[1]; a_predicted[2] = Position[2];

投稿2019/07/05 01:36

fana

総合スコア11632

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

※ 回答じゃなくてゴメン

要素数が3固定なら std::array<float,3> もしくは std::tuple<float,float,float> の方がよくね?

投稿2019/07/04 11:43

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問