🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

最適化

最適化とはメソッドやデザインの最適な処理方法を選択することです。パフォーマンスの向上を目指す為に行われます。プログラミングにおける最適化は、アルゴリズムのスピードアップや、要求されるリソースを減らすことなどを指します。

C++

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

Q&A

解決済

1回答

3465閲覧

変数を線形補間するときの最適解

apa

総合スコア68

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

最適化

最適化とはメソッドやデザインの最適な処理方法を選択することです。パフォーマンスの向上を目指す為に行われます。プログラミングにおける最適化は、アルゴリズムのスピードアップや、要求されるリソースを減らすことなどを指します。

C++

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

0グッド

0クリップ

投稿2021/01/31 03:29

編集2021/02/02 03:38

ゲームでキャラクタの座標をある座標に向かわせるために

lerp (キャラクタ座標, 向かわせたい座標, 補間値(0 ~ 1))
この線形補間 キャラクタ座標に代入させると当たり前ですが、↑の線形補間はきれいな補完をしてくれません(キャラクタ座標が変化しし続けるため)
なので、別の変数Aを用意して移動前キャラクタ座標を代入、その上でlerpの第一引数にAを入れて補完していたのですが、
現状この方法がベストなのでしょうか?
できれば変数を作りたくないです・・・
イメージ説明
UE4でのイメージ図
deltasecondは1フレームの時間(0.0166666と考えていただいて大丈夫)

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

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

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

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

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

y_waiwai

2021/01/31 06:00

実際のコードを提示されないことには回答のしようがないですねー だいたい、lerp関数というのは何でしょうか
ikadzuchi

2021/01/31 11:38

補完ではありません。補間です。
guest

回答1

0

ベストアンサー

既に

  • 向かわせたい座標
  • 補間値
  • 補間値の増分量みたいな?

のような,その処理のための変数が複数存在していると想像され,そんな中で,もう1個変数を増やすのは嫌,というこだわり(?)はよくわかりませんが…

例えば,
「AからBまでを5ステップで移動させる」という話の場合,各ステップを

  1. AからBまでの残りの距離のうち,1/5 だけ進む : A += (B-A)/5
  2. AからBまでの残りの距離のうち,1/4 だけ進む : A += (B-A)/4
  3. AからBまでの残りの距離のうち,1/3 だけ進む : A += (B-A)/3
  4. AからBまでの残りの距離のうち,1/2 だけ進む : A += (B-A)/2
  5. AからBまでの残りの距離のうち,1/1 だけ進む : A += (B-A)/1

という形で処理するならば,「キャラクタ座標」に相当するAの初期値を覚えておく必要はないように思います.


[コメントを受けて追記]

要は,
現在のAからBまで移動するのに要する時間を1としたときに,線形補間に用いる補間値をいくつにすればよいだろうか?」
という問題ですよね.

上記の例で言えば,

  • 最初のステップでまずは 1/5 だけ進んだので,残りは全行程の4/5.
  • 次のステップではこの 4/5 を1とした尺度の上で線形補間を考えればよいわけだ.

このステップでも「全行程の1/5」だけ進むとしたら,それは残りの(4/5の)行程に対してはどれだけの量なのか?っていう.
それは結局,(1/5) / (4/5) = 1/4 となる.だから,「残りの距離のうち,1/4だけ進む」という話.

  • 次のステップも同様.今までで全行程のうちの2/5だけ進んだから,残りは全行程の 3/5.

このステップでも「全行程の1/5」だけ進むとしたら,それは残りの(3/5の)行程から見れば,1/3.

っていうだけの話.
各ステップで進む量がばらばらだろうが話は同じで,「残りの行程に対する補間値」を求めて線形補間に使えばいい.

投稿2021/02/01 01:48

編集2021/02/03 01:16
fana

総合スコア11985

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

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

apa

2021/02/01 06:07

返信ありがとうございます これはなりたっていますでしょうか? 1,2,3,4,5を 5フレームと考えると 1,2フレームの位置が全く同じになっていると思います。 初期値 B = 100 , A = 0と仮定しております
fana

2021/02/01 06:10

Sorry, 「+=」を全て「=」と誤記してました.修正します.
fana

2021/02/01 07:03

この話だと,とりあえず必要な変数は ・目標座標B ・5,4,3,... と減っていく値 の2種類になりますかね.
apa

2021/02/01 13:19 編集

説明たらずで申し訳ないのですが、 なるほど ただ説明不足で申し訳ありませんが、 できれば 補間値をループタイム(60FPS なら0.01666)にしたんですよね なので決まった値整数みたいなものははいらないです。
fana

2021/02/02 02:36

んー,どんな形態がお望みなのかよくわからんです. 求める処理が満たすべき条件を書き並べるとかしないと伝わらないかと.
apa

2021/02/02 03:38

図を追加いたしました
fana

2021/02/02 03:51 編集

(UEを知らんので,細部は呑み込めませんが) 毎処理ステップ毎に, 補間値+=Δt みたいな感じで,関数 lerp() に突っ込む「補間値」を更新している感じでしょうか. そんな話であれば,単にオイラー法でAを更新する: A += V*Δt のが素直かと思ったけど,終了判定のために結局追加の変数が要ることになるかなぁ.
apa

2021/02/02 14:09

毎処理ステップ毎に, 補間値+=Δt みたいな感じで,関数 lerp() に突っ込む「補間値」を更新している感じでしょうか. ↑ ですです
fana

2021/02/03 01:16 編集

いまさらだけども >整数みたいな っていうのは, >・5,4,3,... と減っていく値 のことですか. であれば,そこは別に整数限定とかの話ではないですよ. 回答の趣旨は,Aが変化することによって(今考えている)「補間値」をそのまま使えないなら, 補間値の側を使えるように修正すればいいよね,というだけのことなので. (という話を回答に追記した)
fana

2021/02/03 01:21 編集

で,それはそれとして,わざわざそんな(回答の)形の処理を採ることに特段の利は無いように思われ,2つ前のコメントに記したオイラー法: V = (B-A) //これは初期のAから計算して保持しておく必要がある A += V*Δt とかが素直なのではないかと思うんだけども, 「初期のAを覚えておく」ことと,「Vを覚えておくこと」には実質何も差が無いから,質問の回答としては見合わないかも,みたいな.
apa

2021/02/03 05:49

まあでもそうですよね やはり変数を一つ作るのが無難みたいですね そうしてみます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問