private Point CalculatorCenter(Point cRc1, Point cRc2, Point cRc3) { Point midPoint1 = new Point((int)(cRc1.X + cRc2.X) / 2, (int)(cRc1.Y + cRc2.Y) / 2); Point midPoint2 = new Point((int)(cRc3.X + cRc2.X) / 2, (int)(cRc3.Y + cRc2.Y) / 2); // y = ax+b phuongtrinhduongthang dt1 = giahephuongtrinh(cRc1, cRc2); phuongtrinhduongthang dt2 = giahephuongtrinh(cRc2, cRc3); phuongtrinhvuonggoc(ref dt1, midPoint1); phuongtrinhvuonggoc(ref dt2, midPoint2); Point result = GetCenter(dt1, dt2); return(result); }
private Point GetCenter(phuongtrinhduongthang dt1, phuongtrinhduongthang dt2) { Point center = new Point(); /* * y = a1x + b1 => x = (b2-b1)/ (a1-a2) * y = a2x + b2 * */ center.X = (int)((dt2.b - dt1.b) / (dt1.a - dt2.a)); center.Y = (int)(dt2.a * center.X + dt2.b); return(center); }
private phuongtrinhduongthang giahephuongtrinh(Point point1, Point point2) { phuongtrinhduongthang result = new phuongtrinhduongthang(); /* * y1 = ax1 + b * y2 = ax2 + b * => a = (y1-y2)/(x1-x2) * => b = y1/a*x1 * */ result.a = (double)(point1.Y - point2.Y) / (point1.X - point2.X); result.b = (double)point2.Y - (result.a * point2.X); // convert to ax+by+c = 0 return(result); }
private void phuongtrinhvuonggoc(ref phuongtrinhduongthang dtvg, Point mid) { dtvg.a = -1 / dtvg.a; // y = ax+ b dtvg.b = mid.Y - dtvg.a * mid.X; }