문제

질문이 있습니다. 선을 알고 있습니다. 기울기(m)와 그 위의 점을 알고 있습니다. A(x,y) 점으로부터의 거리(d)를 사용하여 이 선의 점(실제로 두 개)을 계산하려면 어떻게 해야 합니까? ㅏ ???A(x,y)를 거리로 통과하는 선에서 픽셀의 강도를 찾는 방법을 묻습니다. 이 경우 거리는 픽셀 수가 됩니다.

도움이 되었습니까?

해결책

라인을 포인트 슬로프 대신 파라 메트릭 형식으로 변환하는 것이 좋습니다. 즉, 라인의 파라 메트릭 함수는 일부 매개 변수 t의 값에 대해 해당 라인을 따라 점을 반환합니다. 선을 기준점으로 표시하고 해당 지점을 통과하는 선의 방향을 나타내는 벡터를 나타낼 수 있습니다. 그렇게하면, 당신은 다른 지점을 얻기 위해 지점 A에서 뒤로 D 장치를 앞뒤로 이동합니다.

라인에는 슬로프 m이 있으므로 방향 벡터는 <1, m>입니다. x의 1 픽셀마다 m 픽셀을 Y로 이동하기 때문입니다. 해당 방향 벡터를 단위 길이로 정규화하여 벡터의 크기로 나눕니다.

    magnitude = (1^2 + m^2)^(1/2)

    N = <1, m> / magnitude = <1 / magnitude, m / magnitude>

정규화 된 방향 벡터는 N입니다. 이제 거의 끝났습니다. 라인의 방정식을 매개 변수 형식으로 작성하면됩니다.

    f(t) = A + t*N

이것은 사용합니다 벡터 수학. 구체적으로, 스칼라 벡터 곱셈 (당신의 매개 변수 t와 벡터 n)와 벡터 추가 (A와 T*N의). 함수 F의 결과는 선을 따라 점입니다. 당신이 찾고있는 2 점은 f (d)와 f (-d)입니다. 선택한 언어로 구현하십시오.

지금까지 다른 모든 답변과 달리이 방법을 사용하는 장점은이 방법을 쉽게 확장하여 "무한"기울기가있는 라인을 지원할 수 있다는 것입니다. 즉, X = 3과 같은 수직선입니다. 실제로 경사가 필요하지 않습니다. 필요한 것은 정규화 된 방향 벡터 만 있으면됩니다. 수직선의 경우 <0, 1>입니다. 그렇기 때문에 계산이 더 간단하고 특이성이 덜되기 때문에 그래픽 작업이 벡터 수학을 사용하는 이유입니다. 처음에는 조금 복잡해 보일 수 있지만 벡터 작업이 끝나면 많은 컴퓨터 그래픽 작업이 훨씬 쉬워집니다.

다른 팁

답을 간단한 방식으로 설명하겠습니다.

시작점 - (x0, y0)

엔드 포인트 - (x1, y1)

우리는 요점을 찾아야합니다 (xt, yt) 시작점에서 엔드 포인트쪽으로 거리 DT에서.

Point on a line at a distance

시작점과 종말점 사이의 거리는 d = sqrt((x1 - x0)^2 + (y1 - y0)^2)

거리의 비율을두고 t = dt / d

그런 다음 요점 (xt, yt) = (((1 - t) * x0 + t * x1), ((1 - t) * y0 + t * y1))

언제 0 < t < 1, 요점은 줄에 있습니다.

언제 t < 0, 포인트는 근처의 줄 바깥에 있습니다 (x0, y0).

언제 t > 1, 포인트는 근처의 줄 바깥에 있습니다 (x1, y1).

좌표 px, py 및 시작점 A의 좌표 ax 및 ay를 사용하여 P를 찾으려는 지점을 호출해 보겠습니다.기울기 m은 X 변화에 대한 Y 변화의 비율입니다. 따라서 점 P가 A에서 거리 s인 경우 좌표는 px = ax + s이고 py = ay + m * s입니다.이제 피타고라스를 사용하면 A에서 P까지의 거리 d는 d = sqrt(s * s + (m * s) * (m * s))가 됩니다.P를 A로부터 특정 D 단위만큼 멀리 떨어지게 하려면 s를 s = D/sqrt(1 + m * m)으로 찾으세요.

나는 이것이 훌륭하고 이해하기 쉬운 해결책이라고 생각했다.

http://www.physicsforums.com/showpost.php?s=F04D131386FBD83B7B7B5DF27F8DA84FA1&p=2822353&postCount=4

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top