怎么感觉像是在解几何问题啊。两条绿色的直线容易得到,然后找它们的交点,可行不

解决方案 »

  1.   

    理就这么个理,可是我算好久都不对,有没有人写个类似的参考下,,这应该好多人都做剪裁工具时剪裁区域的。。以下是我的代码,不知是方程代错了,有没有指点下啊??急。       
     public void getFriendPoint2(Point MovePoint, Point pLT, Point pLB, Point pRT, Point pRB, out Point FriendLPoint,out Point FriendRPoint)
            {
                Point LeftTop = new Point(pLT.X, pLT.Y);
                Point LeftBottom = new Point(pLB.X, pLB.Y);
                Point RightTop = new Point(pRT.X, pRT.Y);
                Point RightBottom = new Point(pRB.X, pRB.Y);            Point FriendLPoint2 = new Point(0, 0);
                Point FriendRPoint2 = new Point(0, 0);            //求直线1的K,B,直线方程
                Double KLtb = ((Double)LeftBottom.Y - (Double)LeftTop.Y) / ((Double)LeftBottom.X - (Double)LeftTop.X);
                Double BLtb = LeftTop.Y - KLtb * LeftTop.X;
                //FriendLPoint.Y = (int)(KLtb * (Double)FriendLPoint.X + BLtb);
                //Test
                LeftTop.Y = (int)(KLtb * (Double)LeftTop.X + BLtb);            //求平行线的K,B,直线方程
                Double Kparallel = ((Double)RightTop.Y - (Double)LeftTop.Y) / ((Double)RightTop.X - (Double)LeftTop.X);           
                Double Bparallel = (Double)MovePoint.Y - Kparallel * (Double)MovePoint.X;
                //FriendLPoint.Y = (int)(Kparallel * (Double)FriendLPoint.X + Bparallel);
                Double Kparallel2 = ((Double)LeftTop.Y - (Double)RightTop.Y) / ((Double)LeftTop.X - (Double)RightTop.X);
                Double Bparallel2 = (Double)MovePoint.Y - Kparallel2 * (Double)MovePoint.X;
                //FriendRPoint.Y = (int)(Kparallel2 * (Double)FriendPoint.X + Bparallel2);
                          //直线1与平行线的左焦点
                {
                    // FriendPoint.Y =(int)(KLtb * (Double)FriendPoint.X + BLtb) ;
                    //FriendLPoint.Y = (int)(Kparallel * (Double)FriendLPoint.X + Bparallel);
                    FriendLPoint2.X = (int)((Bparallel - BLtb) / (KLtb - Kparallel));
                    // FriendPoint.X= (FriendPoint.Y- BLtb)/KLtb ;
                    // FriendLPoint.X =(FriendLPoint.Y - Bparallel)/Kparallel ;
                    FriendLPoint2.Y  = (int)((BLtb * Kparallel - Bparallel * KLtb)/(Kparallel - KLtb));
                   
                }
                            //求直线2的K,B,直线方程
                Double KRtb = ((Double)RightBottom.Y - (Double)RightTop.Y) / ((Double)RightBottom.X - (Double)RightTop.X);
                Double BRtb = RightTop.Y - KRtb * RightTop.X;
                //直线2与平行线的右焦点
                //FriendRPoint.Y =(int)(KRtb * (Double)FriendRPoint.X + BRtb) ;
                {
                    //FriendRPoint.Y = (int)(Kparallel2 * (Double)FriendRPoint.X + Bparallel2);
                  //FriendRPoint.Y =(int)(KRtb * (Double)FriendRPoint.X + BRtb) ;
                    //FriendRPoint2.X = (int)((Kparallel2 * (Double)FriendRPoint2.X + Bparallel2 - BRtb) / KRtb);
                    //FriendRPoint2.Y = (int)(Kparallel2 * (Double)FriendRPoint2.X + Bparallel2);
                    //FriendRPoint2.X = (int)((Bparallel2 - BRtb) / (KRtb - Kparallel2));
                    //FriendRPoint2.Y = (int)(KRtb * (Double)FriendRPoint2.X + BRtb);
                    FriendRPoint2.X = (int)((Bparallel2 - BRtb) / (KRtb - Kparallel2));
                    // FriendPoint.X= (FriendPoint.Y- BLtb)/KLtb ;
                    // FriendLPoint.X =(FriendLPoint.Y - Bparallel)/Kparallel ;
                    FriendRPoint2.Y = (int)((BRtb * Kparallel2 - Bparallel2 * KRtb) / (Kparallel2 - KRtb));
                   
                }
                FriendLPoint = new Point(FriendLPoint2.X, FriendLPoint2.Y);
                FriendRPoint = new Point(FriendRPoint2.X, FriendRPoint2.Y);