|
发表于 2022-1-20 14:32:58
|
显示全部楼层
本楼为最佳答案
话说我也不喜欢MFC,太复杂。CLR我也不懂,EasyX也不懂!!!
我只用GDI写了个小的演示程序,仅供参考!
求交点坐标太复杂了,如果你写不出可以去百度。这里仅提供一个链接:https://blog.csdn.net/zx3517288/article/details/53326420
- VOID OnButtonOK(HWND hDlg)
- {
- g_iX1 = GetDlgItemInt(hDlg, IDC_EDIT_X1, NULL, FALSE);
- g_iY1 = GetDlgItemInt(hDlg, IDC_EDIT_Y1, NULL, FALSE);
- g_iR1 = GetDlgItemInt(hDlg, IDC_EDIT_R1, NULL, FALSE);
- g_iX2 = GetDlgItemInt(hDlg, IDC_EDIT_X2, NULL, FALSE);
- g_iY2 = GetDlgItemInt(hDlg, IDC_EDIT_Y2, NULL, FALSE);
- g_iR2 = GetDlgItemInt(hDlg, IDC_EDIT_R2, NULL, FALSE);
- InvalidateRect(hDlg, NULL, TRUE);
- double x12 = fabs((double)g_iX1 - (double)g_iX2);
- double y12 = fabs((double)g_iY1 - (double)g_iY2);
- double diff = fabs((double)g_iR1 - (double)g_iR2);
- double Sum = (double)g_iR1 + (double)g_iR2;
- double L = sqrt(x12 * x12 + y12 * y12);
- if (L > Sum) TwoCirclesAreSeparated(hDlg); // 两圆相离
- else if (L == Sum) TwoCirclesCircumscribe(hDlg); // 两圆外切
- else if (L == diff) TwoCirclesInscribed(hDlg); // 两圆内切
- else if (L < diff) TwoCirclesInclusion(hDlg); // 两圆内含
- else TwoCirclesIntersect(hDlg); // 两圆相交
- }
- VOID TwoCirclesAreSeparated(HWND hDlg) // 两圆相离
- {
- SetDlgItemText(hDlg, IDC_EDIT7, L"两圆相离");
- }
- VOID TwoCirclesCircumscribe(HWND hDlg) // 两圆外切
- {
- SetDlgItemText(hDlg, IDC_EDIT7, L"两圆外切");
- }
- VOID TwoCirclesInscribed(HWND hDlg) // 两圆内切
- {
- SetDlgItemText(hDlg, IDC_EDIT7, L"两圆内切");
- }
- VOID TwoCirclesInclusion(HWND hDlg) // 两圆内含
- {
- SetDlgItemText(hDlg, IDC_EDIT7, L"两圆内含");
- }
- VOID TwoCirclesIntersect(HWND hDlg) // 两圆相交
- {
- SetDlgItemText(hDlg, IDC_EDIT7, L"两圆相交");
- }
复制代码
编译好的工程:
CircleRelation.rar
(20.07 KB, 下载次数: 4)
|
|