接续,继续更新
目录
1、计算向量的投影
Point3d a(1, 20, 0);
Point3d b(10, 0, 0);
Point3d b_hat = b / norm(b);//b的模
Point3d a_pro = a.dot(b_hat) * b_hat;
2、求射线与球面的交点坐标
#include <iostream>
#include <opencv2/core.hpp>
using namespace cv;
using namespace std;
int main() {
// 定义球心坐标和半径
cv::Point3f center(0, 0, 1);
double radius = 1;
// 定义点A的坐标
cv::Point3f PA(0.1, 0, 0);
cv::Point3f PB(0.2, 0.1, 0.1);
Point3f PN = PB - PA;
PN = PN / norm(PN);
double AN = PA.dot(PN);
double AN2 = AN * AN;
double N2 = norm(PN) * norm(PN);
double A2 = norm(PA) * norm(PA);
double t = (sqrt(AN2 - N2 * (A2 - radius* radius)) - AN) / N2;
Point3f rlt = PA + t * PN;//假如球心不在原点,只需要结果加上球心坐标即可
cout << rlt << endl;
return 0;
}