我有一個由x1,y1,x2,y2表示的線段,它們是雙值。然後我有 幾個圖形對象(讓我們命名類TShape),其中座標 是左,上,右,下:雙。只有Top和Left屬性可寫入 值。拖動頂部和左側值時更新TShape。力點在一條線上
當TShape靠近一條線時,我正在使用函數進行發現。功能 定義是:如果目標指定點附近點1 和點2指定的行
function NearLine(const Target: TPoint; X1, Y1, X2, Y2: double; Off: integer = 5): boolean;
近線返回true。該點必須在Off指定的距離處。
我使用函數Off = 0
;
在我的實現中,目標是我不斷更新的TShape的中心 從Top和Left屬性計算它。因爲目標是 我TPoint做:
1-
CPoint.X := Trunc(Center.X);
CPoint.Y := Trunc(Center.Y);
2- 和當上述的功能的近線爲真我迫使鼠標釋放:
3-
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
1,2和3在被調用的事件UpdateMove中調用,而 拖動形狀。
這讓我「貼」TShape幾乎在線附近,但它不是 正是我想要的......顯然有一個錯誤,由於Trunc函數。
錯誤是:釋放鼠標
deltaX := Frac(Center.X);
deltaY := Frac(Center.Y);
後編程我怎麼能強制所有與 線中心 因此所有的形狀完美內襯(共線)?
任何幫助? :(
如果你點的是不是已經共線(和你需要3分,因爲兩個p oints總是共線),您可以強制它們由包裹空間,並讓他們走線槽的第四維(時間共線) – 2011-03-25 13:11:09
@Cosmin:愛評論。必須預期程序員2程序員站點上的直線響應:) – sehe 2011-03-25 13:16:11
請您格式化問題,以便它易於閱讀。 – 2011-03-25 13:33:21