new Float: flVec[2][3]; //Это, к примеру, наш вектор АБ, ну flVec[0]
new Float: flPointer[3]; //Это наша точка В
NormalizeVector(flVec[0], flVec[1]); //Нормализуем вектор flVec[0]
new Float: flDot = GetVectorDotProduct(flVec[1], flPointer); //находим длину проекции вектора АВ на нормализованный вектор АБ
if (GetVectorLength(flVec[0]) < flDot < 0.0) {
//Опустить невозможно
}
else {
new Float:flNeedPointer[3]; //Это наша точка в пространстве X
for (new i; i < 3; ++i)
flNeedPointer = (flVec[1] * flDot); //Домножаем нормализованный вектор АБ на длину проекции.
flNeedPointer - это и есть наша точка X
}