_### //点p0に最も近い球上の点p2を求めなさい。_
⚠spはsphere(球)のことです。
ベクトルd =(球体の中心の位置ベクトルー任意の点の位置ベクトル)
球面上の最も近い点=任意の点+(ベクトルdの長さー半径)×dの単位ベクトル
という式をもとに、自力で作成してみたのですが、うまくいきません。
どこが間違っているのか見当がつかないので、質問させてもらいました。
//球体の中心の位置ベクトル DirectX::XMVECTOR SPC = DirectX::XMLoadFloat3(&sp.c); //任意の点の位置ベクトル DirectX::XMVECTOR P0 = DirectX::XMLoadFloat3(&p0); //ベクトルd DirectX::XMVECTOR DirectionVec = DirectX::XMVectorSubtract(SPC, P0); //ベクトルdの長さ DirectX::XMFLOAT3 lengthD; DirectX::XMStoreFloat3(&lengthD, DirectionVec); //ベクトルdの長さ - 半径 変数 DirectX::XMFLOAT3 DirectionVecSubtractRadius; DirectionVecSubtractRadius.x = lengthD - sp.r; DirectionVecSubtractRadius.y = lengthD - sp.r; DirectionVecSubtractRadius.z = lengthD - sp.r; //(ベクトルdの長さ - 半径) × dの単位ベクトル 変数 DirectX::XMVECTOR XYZVECTOR = DirectX::XMLoadFloat3(&DirectionVecSubtractRadius); //dの単位ベクトルを作って DirectX::XMVector3Normalize(DirectionVec); //掛け算する(Scaleパターンも一応試しました) XYZVECTOR = DirectX::XMVector3Cross(DirectionVec, XYZVECTOR); //球面上の最も近い点から任意の点をなくしたもの DirectX::XMFLOAT3 xyz; DirectX::XMStoreFloat3(&xyz, XYZVECTOR); //任意の点 + 球面上の最も近い点任意の点をなくしたもの = 球面上の最も近い点? p2.x = p0.x + xyz.x; p2.y = p0.y + xyz.y; p2.z = p0.z + xyz.z;
回答1件
あなたの回答
tips
プレビュー