2016-10-22 7 views
0

저는 시작 (x1, y1)과 끝 (x2, y2)과 RGBA에 저장된 색상을 가지고 있습니다.시작점과 끝점과 색상이있는 경우 어떻게 선 색상을 선형 보간 할 수 있습니까?

이 두 점 사이에 그래디언트 채우기 선을 그려야하고 선을 따라 각 점에 대해 while (증가) while 루프에서 현재 (x, y) 위치를 얻을 수 있습니다.

시작 및 끝 색상은 point1.color로 사용할 수 있습니다. & point2.color.

그런 다음 DrawPoint (벡터 (x, y))를 사용하여 점을 그리고 루프를 다시 통과하기 전에 SetColor (RGBA)로 색상을 설정합니다.

+2

선형 보간이 어떻게 작동하는지 알고 있습니까? – usr2564301

+1

이미 시도해 보셨습니까? 또한 어떤 드로잉 라이브러리를 사용합니까? 표준 C++이 아닙니다. –

+0

선형 보간법이 어떻게 작동하는지 대략적인 아이디어가 있지만 여전히 학습 중입니다. 도서관은 나에게 제공되는 도서관이다. 나는 성공으로 아무 것도 시도하지 않았지만 다시 C++을 처음 접했습니다. – GilfoyMayhew

답변

3

기존의 코드가 (당신이 당신의 질문에서 언급 한)이 줄을 그립니다 개별 지점의 수는 있어야합니다 :

라인은 주로 수직 방향의 경우입니다
l=max(abs(x2-x1), abs(y2-y1))+1 

가있을 수해야 각 행에 그려지는 점. 그것의 대부분이 수평 적으로 지향되면 모든 컬럼에 포인트가 있어야합니다. 따라서 우리는 그려진 개별 점의 총 수인 l을 단순히 시작 및 끝 x/y 좌표 간의 최대 차이로 유도 할 수 있습니다. 이것이 기존 코드가 수행해야하는 작업입니다.

그래서, 당신은 l 점을 그리게 될 것입니다. 이것은 이제 각 개별 r, g, ba 구성 요소 사이의 간단한 선형 보간이됩니다. "R1"이 (x1, y1)의 R 구성 요소이고 "R2"가 (x2, y2)의 R 구성 요소 인 경우 : i 번째 점을 그릴 때 i이 (x1, y1) 인 경우 0으로 시작하여 및 (X2, Y2)에 도달 l 상기 직선 보간 R은 단순히 :

이 R1 인 i=0 그래서
R1+i/l*(R2-R1) 

, 언제 i=l이 R2이다. 이 선형 보간을 계산해야합니다 : 부동 소수점 연산 사용; 또는 먼저 정수 곱하기를 수행 한 다음 정수 나누기 (정수 정밀도가 곱셈 중에 오버플로를 방지하기에 충분하다고 가정)을 수행합니다.

G, BA 구성 요소에 대해 동일한 절차를 반복하고 헹구십시오.