#数字摄影测量-直角的自动增补
用的是MFC
关键代码:
std::vector<CPoint> temp;
void CzhijiaodianView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CDC* pDC = GetDC();
CString str;
str.Format(TEXT("%d,%d"), point.x, point.y);
pDC->FillSolidRect(0, 0, 100, 100, GetSysColor(COLOR_WINDOW));
pDC->TextOut(1, 0, str);
temp.push_back(point);
CView::OnLButtonDown(nFlags, point);
//CDC* pDC = GetDC();//此时利用的是CWnd的成员函数GetDC
for (int i = 0; i < temp.size()-1; i++)
{
pDC->MoveTo(temp[i]);
pDC->LineTo(temp[i + 1]);
}
ReleaseDC(pDC);
}
void CzhijiaodianView::OnAzengbu()
{
// TODO: 在此添加命令处理程序代码
CPoint Xn_Yn;
CDC* pDC = GetDC();//此时利用的是CWnd的成员函数GetDC
double x1, y1, x2, y2, xn_, yn_, dx, dy, D;
double Xn, Yn;
x1 = temp[0].x;
y1 = temp[0].y;
x2 = temp[1].x;
y2 = temp[1].y;
xn_ = temp[temp.size() - 1].x;
yn_ = temp[temp.size() - 1].y;
dx = x2 - x1;
dy = y2 - y1;
D = pow(dx, 2) + pow(dy, 2);
Xn = ((x1 * dx + y1 * dy) * dy - (yn_ * dx - xn_ * dy) * dy) / D;
Yn = ((yn_ * dx - xn_ * dy) * dx + (x1 * dx + y1 * dy) * dy) / D;
Xn_Yn.x = Xn;
Xn_Yn.y = Yn;
temp.push_back(Xn_Yn);
pDC->MoveTo(temp[temp.size() - 2]);
pDC->LineTo(temp[temp.size() - 1]);
pDC->MoveTo(temp[temp.size() - 1]);
pDC->LineTo(temp[0]);
ReleaseDC(pDC);
}