怎样已知两点坐标画经过它们的直线?(100分)

  • 主题发起人 一个过客
  • 开始时间

一个过客

Unregistered / Unconfirmed
GUEST, unregistred user!
假设两点(x1,y1)(x2,y2)已知,要求在屏幕上(800*600)画出贯穿遮两点的直线。
 
得出直线方程,然后从x:0--800y:0--600划线。
画线算法看看《计算机图形学》
 
对付着看吧。
代码:
SUB g_Line (BYVAL x1 AS INTEGER, BYVAL y1 AS INTEGER, BYVAL x2 AS INTEGER, BYVAL y2 AS INTEGER)
    DIM x AS INTEGER
    DIM y AS INTEGER
    DIM dx AS INTEGER
    DIM dy AS INTEGER
    DIM sx AS INTEGER
    DIM sy AS INTEGER
    DIM interchange AS INTEGER
    DIM i AS INTEGER
    DIM p AS INTEGER
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    x = x1
    y = y1
    dx = ABS(x2 - x1)
    dy = ABS(y2 - y1)
    sx = SGN(x2 - x1)
    sy = SGN(y2 - y1)
    IF dy > dx THEN
        SWAP dy, dx
        interchange = 1
    ELSE
        interchange = 0
    END IF
    p = 2 * dy - dx
    FOR i = 1 TO dx
        g_Point x, y
        IF p > 0 THEN
            IF interchange = 1 THEN
                x = x + sx
            ELSE
                y = y + sy
            END IF
            p = p - 2 * dx
        END IF
        IF interchange = 1 THEN
            y = y + sy
        ELSE
            x = x + sx
        END IF
        p = p + 2 * dy
    NEXT
END SUB
 
同意楼上
 
vb?
image1.canvas.MoveTo(10,10);第一个坐标
image1.canvas.lineTo(20,20);第二个坐标
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=128959
 
如果我没领会错的话,好像
canvas.MoveTo(x1,y1);
canvas.lineTo(x2,y2);
就可以了嘛
 
呵,我也这样认为!
不过照他的意思,应该是
if x1=x2 and y1<>y2 then
begin //平的直线
canvas.MoveTo(x1,0);
canvas.lineTo(x1,600);
end
else
begin
if y1=y2 then
begin
canvas.MoveTo(0,y1);
canvas.lineTo(800,y1);
end
else
begin
canvas.MoveTo((x2*y1-x1y2)/(y1-y2),0);
canvas.lineTo(600*(x1-x2)/(y1-y2))+(x2*y1-x1*y2)/y2-y1,600);
end;
end;
 
直线应该是无限延伸的,上面两位说的都是线段呢。。。
可以这样做:如果你想得到线段,按以上方法即可,
如果想得到直线,请先根据两点确定一条直线的方法来得到这条直线的直线方程,
然后可以根据你的需要设定X的范围,再利用直线方程得到Y,OK,自己画吧。。。
 
truecat,你看到了没有?800*600,其实你只要画这么多就行了,是不是?
 
你应该看看数学里面的两点定线的函数的使用,然后自己领会了!^_^[:D]
 
if x2 > x1 then
begin
if y2 > y1 then
begin
y0 := y1 - x0 * ((y2 - y1) div (x2 -x1))
end;
end;
要写N多条件判断,原理如此。
 
你可以根据已知的俩点,得出过这两点的直线,求出直线和屏幕边缘的焦点坐标(x1,y1)、(x2,y2),
然后再画直线
Canvas.MoveTo(x1,y1);
Canvas.LineTo(x2,y2);
 
顶部