ベクトルの大きさ

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: ベクトルの大きさ

Re: ベクトルの大きさ

#4

by かずま » 6年前

rouse さんが書きました:このコードはとても稚拙だと思いますが、どうかけばきっちりとしたコードになるのでしょうか?
元のコードを活かすと、

コード:

#include <iostream>
#include <math.h>
 
int Qx[4] = { 1,2,3,5 };
int Qy[4] = { 2,3,1,1 };
 
int main()
{
    for (double t = 0; t < 1.0; t += 0.1) {
        double a1 = -3 * (1 - t) * (1 - t) * Qx[0];
        double a2 = -3 * (1 - t) * (1 - t) * Qy[0];
        double b1 = 3 * t * (1 - t) * (1 - 3 * t) * Qx[1];
        double b2 = 3 * t * (1 - t) * (1 - 3 * t) * Qy[1];
        double c1 = 3 * t * (2 - 3 * t) * Qx[2];
        double c2 = 3 * t * (2 - 3 * t) * Qy[2];
        double d1 = 3 * t * t * Qx[3];
        double d2 = 3 * t * t * Qy[3];
        double x = a1*a1 + b1*b1
                + 2 * (a1*c1 + a1*b1 + c1*d1 + b1*c1 + a1*d1 + b1*d1)
                + c1*c1 + d1*d1
                + a2*a2 + b2*b2
                + 2 * (a2*c2 + a2*b2 + c2*d2 + b2*c2 + a2*d2 + b2*d2)
                + c2*c2 + d2*d2;
        std::cout << sqrt(x) << std::endl;
    }
    return 0;
}
元のコードとは異なりますが、
次のように書いても同じ結果になります。

コード:

#include <iostream>
#include <cmath>
 
int Qx[4] = { 1, 2, 3, 5 };
int Qy[4] = { 2, 3, 1, 1 };
 
int main()
{
    for (int i = 0; i <= 10; i++) {
        double t = 0.1 * i;
        double x = -3 * (1 - t) * (1 - t) * Qx[0]
                  + 3 * t * (1 - t) * (1 - 3 * t) * Qx[1]
                  + 3 * t * (2 - 3 * t) * Qx[2]
                  + 3 * t * t * Qx[3];
        double y = -3 * (1 - t) * (1 - t) * Qy[0]
                  + 3 * t * (1 - t) * (1 - 3 * t) * Qy[1]
                  + 3 * t * (2 - 3 * t) * Qy[2]
                  + 3 * t * t * Qy[3];
        std::cout << std::sqrt(x*x + y*y) << std::endl;
    }
    return 0;
}

Re: ベクトルの大きさ

#3

by rouse » 6年前

みけCAT さんが書きました:C++では、変数の値を変えても変える前にその変数を使った計算の結果を代入した変数には影響を与えません。
新しいtの値で計算をしたければ、各変数をtの更新後に計算するようにしなければいけません。
そうするには、16行目~19行目を23行目に持ってくればいいでしょう。


このコードはとても稚拙だと思いますが、どうかけばきっちりとしたコードになるのでしょうか?

Re: ベクトルの大きさ

#2

by みけCAT » 6年前

C++では、変数の値を変えても変える前にその変数を使った計算の結果を代入した変数には影響を与えません。
新しいtの値で計算をしたければ、各変数をtの更新後に計算するようにしなければいけません。
そうするには、16行目~19行目を23行目に持ってくればいいでしょう。

ベクトルの大きさ

#1

by tui » 6年前

P´(t)=-3(1-t)²(1,2)+3t(1-t)(1-3t)(2,3)+3t(2-3t)(3,1)+3t²(5,1)

上の式について0.1から1の範囲でtの値を変化させて|P´(t)|を求めたいです

が値が全くでないです。

どのようにしたらいいですか?

コード:


#include<iostream>
#include<math.h>

double a1, b1, c1, d1, t, a2, b2, c2, d2, x;


int Qx[4] = { 1,2,3,5 };
int Qy[4] = { 2,3,1,1 };

int main()
{
	t = 0;


	a1 = -3 * (1 - t) * (1 - t) * Qx[0];                a2 = -3 * (1 - t) * (1 - t) * Qy[0];
	b1 = 3 * t * (1 - t) * (1 - 3 * t) * Qx[1];         b2 = 3 * t * (1 - t) * (1 - 3 * t) * Qy[1];
	c1 = 3 * t * (2 - 3 * t) * Qx[2];                   c2 = 3 * t * (2 - 3 * t) * Qy[2];
	d1 = 3 * t * t * Qx[3];                             d2 = 3 * t * t * Qy[3];

	for (t = 0; t < 1.0; t = t + 0.1)
	{

		double x = (a1*a1 + b1*b1 + 2 * (a1*c1 + a1*b1 + c1*d1 + b1*c1 + a1*d1 + b1*d1) + c1*c1 + d1*d1 + a2*a2 + b2*b2 + 2 * (a2*c2 + a2*b2 + c2*d2 + b2*c2 + a2*d2 + b2*d2) + c2*c2 + d2*d2);

		std::cout << sqrt(x) << std::endl;

	}





	return 0;

}







ページトップ