2012-02-18 3 views
2

첫 번째 점까지의 거리로 선상의 점을 계산하고 싶습니다. 새로운 점의 좌표가 없기 때문에 선형 보간을 사용할 수 없습니다. 저는 이렇게 생각했습니다 : Example Drawing (죄송합니다, 저는 신규 사용자이며 이미지를 게시 할 수 없습니다)첫 번째 점까지의 거리를 기준으로 한 선상 점

하지만 실제로는 작동하지 않으므로 도움을 요청합니다.

public static PointDouble interpolationByDistance(Line l, double d) { 
    double x1 = l.p1.x, x2 = l.p2.x; 
    double y1 = l.p1.y, y2 = l.p2.y; 
    double ratioP = ratioLine_x_To_y(l); 
    double disP = l.p1.distance(l.p2); 
    double ratioDis = d/disP; 
    PointDouble pn = l.p2.getLocation(); 
    pn.multi(ratioDis); 
    System.out.println("dis: " + d); 
    System.out.println("new point dis: " + l.p1.distance(pn)); 
    return pn; 
} 

감사합니다 :

여기에 자바의 실제 코드입니다. 이것의

+0

더 유용한 변수 이름을 사용하면 도움이 될 수 있습니다. 나는 그것이 당신의 삶을 편하게 해줄 것이라고 내기를 기꺼이 할 것입니다. – jonmorgan

답변

3

프로그래머는 이미 해결 한 문제로 변경하는 것이 좋습니다. 비율을 찾은 다음 선형 보간을 사용하십시오.

public static PointDouble interpolationByDistance(Line l, double d) { 
    double len = l.p1.distance(l.p2); 
    double ratio = d/len; 
    double x = ratio*l.p2.x + (1.0 - ratio)*l.p1.x; 
    double y = ratio*l.p2.y + (1.0 - ratio)*l.p1.y; 
    System.out.println(x + ", " + y); 
    ... 
} 
+0

감사합니다, 아주 좋은 알고리즘! :) – Thomas

+1

아, 나는 언급하는 것을 잊었다 : 선 3은 "double ratio = d/len;"이어야한다. 전체 비율을 사용해야합니다. – Thomas

+0

물론 당신이 맞습니다 :) 이것은 또한 우리에게 특별한 경우를 저장합니다. –

1

기본은 매우 간단하다 :

  • 경우 f==0, 다음 다음 xp = x2, yp=y2
  • 경우 f==1, xp = x1, yp=y1
  • 을 어떤 값 :

    f = 0.3; 
    xp = f * x1 + (1-f) * x2; 
    yp = f * y1 + (1-f) * y2; 
    

    고려,이를 이해하기 0..1 사이에 f 인 경우사이에 점이 생깁니다.

정확한 계산 의도는 확실하지 않습니다. 이 값은 0..1 범위의 값 f입니다. 절대 길이가 d 인 경우 f=d/disP

관련 문제