| 发表于:2007-04-01 11:00:0213楼 得分:0 |
给你代码参考一下:你自己再测试一下 float x1, y1, x2, y2, y3, x3; x1 =200.0f; y1 =150.0f; x2 = 380.0f; y2 = 130.0f; x3 = 40.0f; y3 = 200.0f; float x0, y0,r0;//圆心和半径 float m1, m2,mx1,mx2,my1,my2; if( math.abs(y2 - y1) < 0.0001) { m2 = -(x3 - x2) / (y3 - y2); mx2 = (x2 + x3) / 2.0f; my2 = (y2 + y3) / 2.0f; x0 = (x1+x2)/2.0f; y0 = m2 * (x0 - mx2) + my2; } else if (math.abs(y3 - y2) <0.0001) { m1 = -(x2 - x1) / (y2 - y1); mx1 = (x1 + x2) / 2.0f; my1 = (y1 + y2) / 2.0f; x0 = (x2+x3) / 2.0f; y0 = m1 * (x0 - mx1) + my1; } else { m1 = -(x2 - x1) / (y2 - y1); m2 = -(x3 - x2) / (y3 - y2); mx1 = (x1 + x2) / 2.0f; mx2 = (x2 + x3) / 2.0f; my1 = (y1 + y2) / 2.0f; my2 = (y2 + y3) / 2.0f; x0 = (m1 * mx1 - m2 * mx2 + my2 - my1) / (m1 - m2); y0 = m1 * (x0 - mx1) + my1; } r0 = convert.tosingle(math.sqrt((x0 - x1) * (x0 - x1) + (y0 - y1) * (y0 - y1))); graphics g = this.picturebox1.creategraphics(); g.drawellipse(new pen(color.blue), new rectanglef(x1, y1, 2,2)); g.drawellipse(new pen(color.blue), new rectanglef(x2, y2, 2, 2)); g.drawellipse(new pen(color.blue), new rectanglef(x3, y3, 2, 2)); //画弧 float k1, k2, k3;//斜率 k1 = (y1 - y0) / (x1 - x0); k2 = (y2 - y0) / (x2 - x0); k3 = (y3 - y0) / (x3 - x0); double[] a = new double[3];//弧度 double[] b= new double[3];//角度 double[] x = new double[3]; double min, max; double v = 180.0 / 3.14159;//弧度与角度转换 a[0] = math.atan(k1); a[1] = math.atan(k2); a[2] = math.atan(k3); x[0] = x1; x[1] = x2; x[2] = x3; for (int i = 0; i < 3; i++) { if (a[i] > = 0) { if (x[i] > x0) { b[i] = a[i] * v; } else if (x[i] < x0) { b[i] = 180.0 + a[i] * v; } } else { a[i] = math.abs(a[i]); if (x[i] > x0) { b[i] =360.0- a[i] * v; } else if (x[i] < x0) { b[i] = 180.0- a[i] * v; } } } //寻找最小角度和最大角度 min = b[0]; max = b[0]; for (int i = 1; i < 3; i++) { if (b[i] < min) min = b[i]; if (b[i] > max) max = b[i]; } //画弧 g.drawarc(new pen(color.black), new rectanglef(x0 - r0, y0 - r0, 2 * r0, 2 * r0), (float)min, (float)(max - min)); | | |
|