老师,您好
请问一下,我看我想实现如下视频所示的,放置cell时,cell的方向和鼠标的方向一致,该如何设置旋转矩阵?谢谢。
视频无法播放,您现在能获取到的都有哪些信息?
郭老师好,就是我要绘制道路箭头,确定cell的第一个原点后,箭头的方向随着鼠标动态的移动,鼠标点击第二个点后就确定了箭头的位置。
那您点击第一个点和第二个点之后,这两个点就确定了箭头的方向了呀,这个方向再跟世界坐标系的Z轴构成一个旋转矩阵就行了。
郭老师,请问一下,两个点和z轴构成的旋转矩阵,怎么求?下面是我的测试代码,谢谢
MSElement place_roadMark::CreateRoadMark(DPoint3dR basePt) { MSElement msElement; DPoint3d scale = { 1,1,1 }; DPoint3d origin = { basePt.x, basePt.y, basePt.z }; mdlSharedCell_create(&msElement, NULL, &origin, NULL, &scale, L"直行_右转箭头", NULL, FALSE, 0, NULL); if (SUCCESS != mdlSharedCell_makeSureDefExists(&msElement)) { mdlDialog_openAlert(L"可能没有连接单元库FlatAssets.cell"); return msElement; } mdlSharedCell_setRange(&msElement, ACTIVEMODEL); //mdlElement_add(&cell); return msElement; }
两个点先构成一个向量(DVec3d::FromStartEnd),然后再用这个向量跟Z轴向量做叉乘(DVec3d::FromCrossProduct)就得到目标坐标系的第三个轴了,再将这三个向量都单位化一下,最后用这三个单位向量就构成目标坐标系了。