提示コードの**/-----------------------外積 ベクトル x ベクトル------------------------------------------------/**のofsでテキストファイルに注力してします(提示画像)です。外積のコードです。画像のx,y,z のxですがなぜ-0なのでしょうか?数学上は 0 * -20は 0 になるはずですが...それはまた別としてなぜ0にはならないのでしょうか?コンソールアプリを作成して実験しましたが値は0になりました(float型)です。
※DXライブラリ(DirectX)だからでしょうか?
コンソールアプリ
int main() { Vector a(0.0f,0.0f,0.0f); //Vector magnitude = sqrt(Vector::dot(a, b)); //Vector magnitude = normalize(a); //float f = 0 / 0; float f = 0.0f; f = 0.0f * -20.0f; printf("%f",&f); int _ch = getchar(); return 0; }
Vector.cpp
#include "Vector.hpp" #include "DxLib.h" #include <fstream> /*ベクトル x スカラーの掛け算*/ Vector Vector::mul_scalar(float a, Vector v) { return Vector(a * v.x,a * v.y,a * v.z); } /*外積 ベクトル x ベクトル*/ Vector Vector::cross(Vector a,Vector b) { return Vector( (a.y * b.z) - (a.z * b.y), (a.z * b.x) - (a.x * b.z), (a.x * b.y) - (a.y * b.x)); } /*-----------------------外積 ベクトル x ベクトル------------------------------------------------*/ VECTOR Vector::cross(VECTOR a, VECTOR b) { const char* filename = "Log.txt"; std::ofstream ofs(filename); VECTOR v; v.x = (a.y * b.z) - (a.z * b.y); ofs << " いいいいいいいい : (" << a.y << " * " << b.z << ") - (" << a.z << " * " << b.y <<") "<< std::endl; v.y = (a.z * b.x) - (a.x * b.z); v.z = (a.x * b.y) - (a.y * b.x); ofs << " あああああv : " << v.x << " , " << v.y << " , " << v.z << std::endl; return v; } /*-------------------------------------------------------------------------------------------------*/ Vector Vector::operator - (Vector v) { return Vector( (x - v.x) , (y - v.y), (z - v.z) ); } /*内積*/ float Vector::dot(Vector a, Vector b) { return (a.x * b.x) + (a.y * b.y) + (a.z * b.z); } /*内積*/ float Vector::dot(VECTOR a, VECTOR b) { return (a.x * b.x) + (a.y * b.y) + (a.z * b.z); } /*コンストラクタ*/ Vector::Vector(float xx,float yy,float zz) { x = xx; y = yy; z = zz; } /*tagVECTOR tと自作vector を比較*/ Vector Vector::operator = (tagVECTOR t) { this->x = t.x; this->y = t.y; this->z = t.z; return *this; } /*コンストラクタ*/ Vector::Vector() { x = 0.0f; y = 0.0f; z = 0.0f; } /*オペレーター = */ Vector Vector::operator = (Vector v) { this->x = v.x; this->y = v.y; this->z = v.z; return *this; } /*オペレーター + */ Vector Vector::operator + (Vector v) { Vector t; t.x = this->x + v.x; t.y = this->y + v.y; t.z = this->z + v.z; return t; } /*コンストラクタ 実部、虚部(Vector) */ Quaternion::Quaternion(float aa, Vector vv) { a = aa;//実部 /*虚部*/ v = vv; } /*コンストラクタ 引数なし*/ Quaternion::Quaternion() { a = 0.0f;//実部 /*虚部*/ v.x = 0.0f; v.y = 0.0f; v.z = 0.0f; } /*クォータニオン同士の掛け算 A = (a; U) B = (b; V) AB = (ab - U・V; aV + bU + U×V) */ Quaternion Quaternion::operator * ( Quaternion t ) { return Quaternion(this->a * t.a - Vector::dot(this->v,t.v),Vector(Vector::mul_scalar(this->a,t.v) + Vector::mul_scalar(t.a,this->v) + Vector::cross(this->v,t.v))); }
回答1件
あなたの回答
tips
プレビュー