C++根据三点求平行四边形的平分阵列
如下图,已知ABC三个点,且ABCD是平行四边形,求各个点的(阵列)的坐标
void OnBnClickedButtonCreatematrix3point()
{//通过前面三点,计算出第四点POINTF64 t_pointMiddle;//对角线交点t_pointMiddle.x = (pMain->m_NodeMatrix.m_point_ld.x+pMain->m_NodeMatrix.m_point_ru.x)/2;t_pointMiddle.y = (pMain->m_NodeMatrix.m_point_ld.y+pMain->m_NodeMatrix.m_point_ru.y)/2;POINTF64 t_pointRd;//右下角第四点坐标t_pointRd.x = 2*t_pointMiddle.x-pMain->m_NodeMatrix.m_point_lu.x;t_pointRd.y = 2*t_pointMiddle.y-pMain->m_NodeMatrix.m_point_lu.y;//到此四点坐标全部获取到POINTF64 vec_upSide;//上边向量vec_upSide.x = pMain->m_NodeMatrix.m_point_ru.x - pMain->m_NodeMatrix.m_point_lu.x;vec_upSide.y = pMain->m_NodeMatrix.m_point_ru.y - pMain->m_NodeMatrix.m_point_lu.y;POINTF64 vec_downSide;//下边向量vec_downSide.x = t_pointRd.x - pMain->m_NodeMatrix.m_point_ld.x;vec_downSide.y = t_pointRd.y - pMain->m_NodeMatrix.m_point_ld.y;POINTF64 vec_upUnit;//求上边单位向量,整体向量除以列数vec_upUnit.x = vec_upSide.x/(pMain->m_NodeInfo.m_s32Col-1);vec_upUnit.y = vec_upSide.y/(pMain->m_NodeInfo.m_s32Col-1);POINTF64 vec_downUnit;//求下边单位向量,整体向量除以列数vec_downUnit.x = vec_downSide.x/(pMain->m_NodeInfo.m_s32Col-1);vec_downUnit.y = vec_downSide.y/(pMain->m_NodeInfo.m_s32Col-1);vector<POINTF> vec1;vector<POINTF> vec2;vector<POINTF> vecdst;//开始获取上\下边的所有点for(int i=0;i<pMain->m_NodeInfo.m_s32Col;++i){POINTF tep;tep.x = i*vec_upUnit.x+pMain->m_NodeMatrix.m_point_lu.x;tep.y = i*vec_upUnit.y+pMain->m_NodeMatrix.m_point_lu.y;vec1.push_back(tep);POINTF tep1;tep1.x = i*vec_downUnit.x+pMain->m_NodeMatrix.m_point_ld.x;tep1.y = i*vec_downUnit.y+pMain->m_NodeMatrix.m_point_ld.y;vec2.push_back(tep1);}//1\先获取上下两边向量,求平均点pMain->m_dstPos.clear();for(int i=0;i<pMain->m_NodeInfo.m_s32Col;++i){if(i%2==0){vecdst.push_back(vec1[i]);vecdst.push_back(vec2[i]);}else{vecdst.push_back(vec2[i]);vecdst.push_back(vec1[i]);}}int m=0;if(pMain->Databuf!=NULL){delete pMain->Databuf;pMain->Databuf =NULL;}pMain->Databuf = new T2DCompareData[pMain->m_NodeInfo.m_s32Col*pMain->m_NodeInfo.m_s32Row];if(pMain->Databuf==NULL){AfxMessageBox(_T("动态申请内存空间失败,请联系工程师"));return;}bool t_bturn = true;for(int i=0;i<vecdst.size()-1;){POINTF vec_Unit;vec_Unit.x = (vecdst[i+1].x-vecdst[i].x)/(pMain->m_NodeInfo.m_s32Row-1);vec_Unit.y = (vecdst[i+1].y-vecdst[i].y)/(pMain->m_NodeInfo.m_s32Row-1);if(t_bturn==true)//从上到下{for(int j=0;j<pMain->m_NodeInfo.m_s32Row;++j)//起始点+单位向量{T2DCompareData tep;tep.px= vecdst[i].x+vec_Unit.x*j;tep.py= vecdst[i].y+vec_Unit.y*j;pMain->Databuf[m++] = tep;pMain->m_dstPos.push_back(tep);}t_bturn = !t_bturn;}else//从下到上{for(int j=0;j<pMain->m_NodeInfo.m_s32Row;++j)//起始点+单位向量{T2DCompareData tep;tep.px= vecdst[i].x+vec_Unit.x*j;tep.py= vecdst[i].y+vec_Unit.y*j;pMain->Databuf[m++] = tep;pMain->m_dstPos.push_back(tep);}t_bturn = !t_bturn;}i+=2;}//开始保存点阵的中心点参数,下次开机直接取用SaveMatrix();
}