2012-11-28 3 views
3

두 점에서 선을 그려야하고 지금까지 내가 수행 한 작업은 drawLine(x1,y1,x2,y2)입니다. 그러나 내가하고자하는 것은이 두 점 (x1,y1)(x2,y2)과 교차하는 선을 그리는 것입니다.java의 그래픽 클래스로 직선 그리기

Line Drawings

답변

3

일부 mathematik을 사용할 수

난 그냥 그들 사이에 선을 그릴 하지 않으려는, 여기에 내가 가지고있는 이미지와 제가하고 싶은입니다. 당신의 선의 증가를 얻으십시오. 함수를 알아야합니다.

f (x) = mx + b. 이미 가지고있는 두 점을 사용하여 프레임의 테두리에서 두 개의 다른 점을 계산하고 두 점 사이에 선을 그립니다.

+0

네는 바로 먹으 렴하지만 이미 존재하는 기능을 찾을 수 있다면 .. 좋을하지만 내가 아무것도 발견하지 말자 경우 내가 사용하는 것입니다 무엇을, 감사합니다 것 다른 해결책 :) – Ben

+0

난 그냥이 질문을 발견;) http://stackoverflow.com/questions/12286687/draw-an-infinite-line-through-2-points – SomeJavaGuy

1

선이 자신의 경계를 만나는 좌표를 계산해야합니다 그래픽 컨텍스트.

(x1, y1) 및 (x2, y2)가있는 경우 x_a 및 y_a가 (x_a, 0) 및 (0, y_a)가되도록 계산하십시오. x_a = 0이면 선은 왼쪽 가장자리부터 시작합니다. y_a = 0이면, 선은 상단 모서리부터 시작합니다.

줄의 오른쪽/오른쪽 줄에 대해 반복하십시오.

0

Bresenham의 라인 알고리즘

private int sign (int x) { 
    return (x > 0) ? 1 : (x < 0) ? -1 : 0; 
} 

public void drawBresenhamLine (int xstart, int ystart, int xend, int yend, Graphics g){ 
    int x, y, dx, dy, incx, incy, pdx, pdy, es, el, err; 

    dx = xend - xstart; 
    dy = yend - ystart; 

    incx = sign(dx); 

    incy = sign(dy); 


    if (dx < 0) dx = -dx; 
    if (dy < 0) dy = -dy; 

    if (dx > dy){ 
     pdx = incx; pdy = 0; 
     es = dy; el = dx; 
    } else { 
     pdx = 0; pdy = incy; 
     es = dx; el = dy; 
    } 

    x = xstart; 
    y = ystart; 
    err = el/2; 
    g.drawLine (x, y, x, y); 

    for (int t = 0; t < el; t++)//if I multiply el a line will be longer 
    { 
     err -= es; 
     if (err < 0) { 
      err += el; 
      x += incx; 
      y += incy; 
     } else { 
      x += pdx; 
      y += pdy; 
     } 

     g.drawLine (x, y, x, y); 
    } 
}