| 发表于:2007-03-04 11:56:005楼 得分:0 |
/// <summary> /// 计算两点间的角度 /// </summary> /// <param name= "aorigin "> 原点坐标 </param> /// <param name= "apoint "> 参考点坐标 </param> /// <returns> 返回两点间的角度 </returns> private double pointtoangle(point aorigin, point apoint) { if (apoint.x == aorigin.x) if (apoint.y > aorigin.y) return math.pi * 0.5; else return math.pi * 1.5; else if (apoint.y == aorigin.y) if (apoint.x > aorigin.x) return 0; else return math.pi; else { double result = math.atan((aorigin.y - apoint.y) / (aorigin.x - apoint.x)); if ((apoint.x < aorigin.x) && (apoint.y > aorigin.y)) return result + math.pi; else if ((apoint.x < aorigin.x) && (apoint.y < aorigin.y)) return result + math.pi; else if ((apoint.x > aorigin.x) && (apoint.y < aorigin.y)) return result + 2 * math.pi; else return result; } } /* pointtoangle */ private point calc(point a, point b, int bc, double abc) { double d = pointtoangle(b, a); return new point( (int)(math.cos(d - abc) * (bc)) + b.x, (int)(math.sin(d - abc) * (bc)) + b.y ); } private void button1_click(object sender, eventargs e) { point a = new point(40, 40); point b = new point(100, 90); point c = calc(a, b, 100, (1d / 4d) * math.pi); graphics vgraphics = graphics.fromhwnd(handle); vgraphics.drawline(pens.blue, a, b); vgraphics.drawline(pens.red, a, c); vgraphics.drawline(pens.green, c, b); vgraphics.drawstring( "a ", font, brushes.black, 0f + a.x, 0f + a.y); vgraphics.drawstring( "b ", font, brushes.black, 0f + b.x, 0f + b.y); vgraphics.drawstring( "c ", font, brushes.black, 0f + c.x, 0f + c.y); } | | |
|