기본적으로 다각형을 그리기를 원하지만 가장자리가 딱딱하지 않고 부드럽게 보입니다. 다각형의 모양이 중요하기 때문에 모서리가 점을 지나야합니다.점 집합에 닫힌 커브를 그리려면 어떻게해야합니까?
열린 커브 (예 : 커브를 감싸고 있지 않은 커브)에 대해 모노톤 3 차 스플라인이 정확하지만 찾은 알고리즘은 0과 N을 사전 계산합니다. 닫힌 커브로 작업 하시겠습니까?
JavaScript로 구현 중이지만 가상 코드도 마찬가지입니다.
기본적으로 다각형을 그리기를 원하지만 가장자리가 딱딱하지 않고 부드럽게 보입니다. 다각형의 모양이 중요하기 때문에 모서리가 점을 지나야합니다.점 집합에 닫힌 커브를 그리려면 어떻게해야합니까?
열린 커브 (예 : 커브를 감싸고 있지 않은 커브)에 대해 모노톤 3 차 스플라인이 정확하지만 찾은 알고리즘은 0과 N을 사전 계산합니다. 닫힌 커브로 작업 하시겠습니까?
JavaScript로 구현 중이지만 가상 코드도 마찬가지입니다.
There is an easy method (Maxim Shemanarev가 개발)을 사용하여 점 집합에 설정된 잘 드러난 닫힌 베 지어 곡선을 만듭니다. 예 : 너 한테의
중요한 순간 :
및 샘플 코드 :
// Assume we need to calculate the control
// points between (x1,y1) and (x2,y2).
// Then x0,y0 - the previous vertex,
// x3,y3 - the next one.
double xc1 = (x0 + x1)/2.0;
double yc1 = (y0 + y1)/2.0;
double xc2 = (x1 + x2)/2.0;
double yc2 = (y1 + y2)/2.0;
double xc3 = (x2 + x3)/2.0;
double yc3 = (y2 + y3)/2.0;
double len1 = sqrt((x1-x0) * (x1-x0) + (y1-y0) * (y1-y0));
double len2 = sqrt((x2-x1) * (x2-x1) + (y2-y1) * (y2-y1));
double len3 = sqrt((x3-x2) * (x3-x2) + (y3-y2) * (y3-y2));
double k1 = len1/(len1 + len2);
double k2 = len2/(len2 + len3);
double xm1 = xc1 + (xc2 - xc1) * k1;
double ym1 = yc1 + (yc2 - yc1) * k1;
double xm2 = xc2 + (xc3 - xc2) * k2;
double ym2 = yc2 + (yc3 - yc2) * k2;
// Resulting control points. Here smooth_value is mentioned
// above coefficient K whose value should be in range [0...1].
ctrl1_x = xm1 + (xc2 - xm1) * smooth_value + x1 - xm1;
ctrl1_y = ym1 + (yc2 - ym1) * smooth_value + y1 - ym1;
ctrl2_x = xm2 + (xc2 - xm2) * smooth_value + x2 - xm2;
ctrl2_y = ym2 + (yc2 - ym2) * smooth_value + y2 - ym2;
당신의 대답에이 쉬운 방법을 자세히 설명해 주시겠습니까? 이것이 의미 하듯이, 대답의 가치는 전적으로 해당 URL에서 페이지를 내려 보내거나 이동하지 않는 것에 달려 있습니다. –
@Asad 예, 그 의미가 있습니다 – MBo
고마워요! +1 좋은 답변. –
당신이 캔버스에 의미합니까? –
좌표를 알아 내야하기 때문에 관련이 없습니다. 하지만 그렇습니다. 솔루션이 있다면 SVG도 괜찮을 것입니다.이 경우 솔루션을 캔버스로 변환 할 수 있습니다. – Blixt
'가장자리가 부드럽게 보임'을 의미합니까? '부드럽게 보이는 점'을 의미합니까? –