/// <summary> /// 检查矩形与圆形是否发生了碰撞 /// </summary> /// /// <param name="rect1"></param> /// <param name="rect2"></param> /// <returns></returns> public static bool IsRectToCirc(RectBox rect1, RectBox rect2) { float radius = rect2.GetWidth() / 2; Point middle = GetMiddlePoint(rect2); Point upperLeft = new Point(rect1.GetMinX(), rect1.GetMinY()); Point upperRight = new Point(rect1.GetMaxX(), rect1.GetMinY()); Point downLeft = new Point(rect1.GetMinX(), rect1.GetMaxY()); Point downRight = new Point(rect1.GetMaxX(), rect1.GetMaxY()); bool collided = true; if (!IsPointToLine(upperLeft, upperRight, middle, radius)) { if (!IsPointToLine(upperRight, downRight, middle, radius)) { if (!IsPointToLine(upperLeft, downLeft, middle, radius)) { if (!IsPointToLine(downLeft, downRight, middle, radius)) { collided = false; } } } } return collided; }
public virtual int GetScroll(RectBox visibleRect, int orientation, int direction) { int cellSize = this.GetCellSize(); double scrollPos = 0.0D; if (orientation == 0) { if (direction < 0) { scrollPos = visibleRect.GetMinX(); } else if (direction > 0) { scrollPos = visibleRect.GetMaxX(); } } else if (direction < 0) { scrollPos = visibleRect.GetMinY(); } else if (direction > 0) { scrollPos = visibleRect.GetMaxY(); } int increment = System.Math.Abs((int)System.Math.IEEERemainder(scrollPos, cellSize)); if (increment == 0) { increment = cellSize; } return increment; }