直角三角形ABC,B直角,已知点A,点B,边b,求C点坐标 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 图片地址 http://wenwen.soso.com/z/q264683155.htm 这个结果算出来的是包含这条线的矩形你可以根据L1,L2的值和A,B点的坐标算出四个点的具体坐标 protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); e.Graphics.DrawLine(new Pen(Color.Black, 18), p1, p2); e.Graphics.DrawRectangle(Pens.Blue, GetLineRectangle()); } Point p1 = new Point(90, 60); Point p2 = new Point(140, 180); private Rectangle GetLineRectangle() { int l1 = Math.Abs(p1.X - p2.X); int l2 = Math.Abs(p1.Y - p2.Y); double l3 = Math.Sqrt(l1 * l1 + l2 * l2); double angle = Math.Acos(l1 / l3) * (180/Math.PI); double aaa = Math.PI * angle / 180.0; double L2 = Math.Cos(aaa) * 9; double L1 = Math.Sin(aaa) * 9; return new Rectangle((int)((double)p1.X- L1),(int)((double)p1.Y - L2),(int)(l1+L1*2+2),(int)(l2+L2*2+2)); } 不是这样的,意思就是 我画了一条很细的线,比如我现在要变粗,然后把变粗后的4个点寻找到。粗细就是我的size 本想用椭圆方程,最后还是采用向量的思路去解决,未仔细优化,供参考。private MyPoint[] Algorithm_PointPos(MyPoint PointA, MyPoint pointB, int thick) { double h = thick / 2.0; MyPoint ptVec = new MyPoint(); //有符号 ptVec.X = pointB.X - PointA.X; ptVec.Y = pointB.Y - PointA.Y; double lineLen = Math.Sqrt(Math.Pow(ptVec.X, 2) + Math.Pow(ptVec.Y, 2)); double cosAngle = Math.Abs(ptVec.X) / lineLen; double sinAngle = Math.Abs(ptVec.Y) / lineLen; MyPoint ptAN = new MyPoint(); //first point ptAN.X = h * sinAngle; ptAN.Y = h * cosAngle; MyPoint[] pts = new MyPoint[4]; if (ptVec.X * ptVec.Y > 0) { pts[0] = new MyPoint(PointA.X + ptAN.X, PointA.Y - ptAN.Y); pts[1] = new MyPoint(PointA.X - ptAN.X, PointA.Y + ptAN.Y); pts[2] = new MyPoint(pts[0].X + ptVec.X, pts[0].Y + ptVec.Y); pts[3] = new MyPoint(pts[1].X + ptVec.X, pts[1].Y + ptVec.Y); } else { pts[0] = new MyPoint(PointA.X - ptAN.X, PointA.Y - ptAN.Y); pts[1] = new MyPoint(PointA.X + ptAN.X, PointA.Y + ptAN.Y); pts[2] = new MyPoint(pts[0].X + ptVec.X, pts[0].Y + ptVec.Y); pts[3] = new MyPoint(pts[1].X + ptVec.X, pts[1].Y + ptVec.Y); } return pts; }运行效果:下载项目文件:下载 登录问题 bs如何实现数据同步 listview控件中的itemtemplate和edittemplate的问题 exce里面插入checkbox,如何把他显示的“复选框X”重命名为自己需要的名称 关于sender的简单的问题 ASP.NET(C#)图片上传出错! 请问C#控制台程序中如何实现清屏? 如何判断集合为空 关于GirdView里面嵌套dropdownList 关于座位排序问题!在线等....(.net) 多变图形 有个list,由几个list组合而成……如何让list1,list2,。。。,listN中的这个也删除掉呢?
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
e.Graphics.DrawLine(new Pen(Color.Black, 18), p1, p2);
e.Graphics.DrawRectangle(Pens.Blue, GetLineRectangle());
} Point p1 = new Point(90, 60);
Point p2 = new Point(140, 180);
private Rectangle GetLineRectangle()
{
int l1 = Math.Abs(p1.X - p2.X);
int l2 = Math.Abs(p1.Y - p2.Y);
double l3 = Math.Sqrt(l1 * l1 + l2 * l2);
double angle = Math.Acos(l1 / l3) * (180/Math.PI);
double aaa = Math.PI * angle / 180.0;
double L2 = Math.Cos(aaa) * 9;
double L1 = Math.Sin(aaa) * 9;
return new Rectangle((int)((double)p1.X- L1),(int)((double)p1.Y - L2),(int)(l1+L1*2+2),(int)(l2+L2*2+2));
}
{
double h = thick / 2.0;
MyPoint ptVec = new MyPoint(); //有符号
ptVec.X = pointB.X - PointA.X;
ptVec.Y = pointB.Y - PointA.Y;
double lineLen = Math.Sqrt(Math.Pow(ptVec.X, 2) + Math.Pow(ptVec.Y, 2));
double cosAngle = Math.Abs(ptVec.X) / lineLen;
double sinAngle = Math.Abs(ptVec.Y) / lineLen; MyPoint ptAN = new MyPoint(); //first point
ptAN.X = h * sinAngle;
ptAN.Y = h * cosAngle;
MyPoint[] pts = new MyPoint[4];
if (ptVec.X * ptVec.Y > 0)
{
pts[0] = new MyPoint(PointA.X + ptAN.X, PointA.Y - ptAN.Y);
pts[1] = new MyPoint(PointA.X - ptAN.X, PointA.Y + ptAN.Y);
pts[2] = new MyPoint(pts[0].X + ptVec.X, pts[0].Y + ptVec.Y);
pts[3] = new MyPoint(pts[1].X + ptVec.X, pts[1].Y + ptVec.Y);
}
else
{
pts[0] = new MyPoint(PointA.X - ptAN.X, PointA.Y - ptAN.Y);
pts[1] = new MyPoint(PointA.X + ptAN.X, PointA.Y + ptAN.Y);
pts[2] = new MyPoint(pts[0].X + ptVec.X, pts[0].Y + ptVec.Y);
pts[3] = new MyPoint(pts[1].X + ptVec.X, pts[1].Y + ptVec.Y);
}
return pts;
}运行效果:
下载项目文件:
下载