2017-11-24 4 views
0

html, svg 또는 캔버스에서 4 시간 동안 웨이브를 검색했지만 그림에서와 같이 보이지 않는 내용을 찾지 못했습니다.Html5, svg, canvas에서 부드러운 웨이브를 만드는 방법은 무엇입니까?

어떻게 이런 물결을 만들 수 있습니까? 매끄러운 결말로 그리고 색깔로 채워지 는가?

enter image description here

+0

4시간 정말? 구글에'html canvas curve line '을 입력 한 것만으로도 이상한 결과가 있습니다. 이 사이트에서도 하나 : https://stackoverflow.com/questions/7054272/how-to-draw-smooth-curve-through-n-points-using-javascript-html5-canvas (Duplicate) – pokeybit

+0

꽤 나쁜 예절입니다. 이런 질문을하십시오. 다운로드 스케치 또는 inkscape하고 거기에 svg를 만듭니다. 또는 SVG 도면 작성에 대한 수백 가지 자습서를 방문하십시오 –

+0

@pokeybit @ 당신의 URL에 나를 보여 주겠다. 같은 뜻의 웨이브가 –

답변

1

이 형상 bezierCurveTo() 캔버스를 사용하여 달성 될 수있다. 모양이 SVG에서도 가능할 것이라고 확신합니다. 그러나 익숙하지는 않습니다. 아래는 캔버스 데모입니다.

발췌 문장을 빌려서 MDN 기사에서 수정했습니다. 기본적으로 제어점을 시작점과 끝점과 같은 y 축에 유지하는 베 지어 곡선이 필요합니다. x 축을 따라 제어점을 이동하여 커브를 더 크게 또는 덜 드라마하게 만듭니다. 첫 번째 제어점과 두 번째 제어점이 시작점과 종점 (각각)에 가까울수록 커브가 더 극적으로됩니다.

그래프를 직선을 사용하여 캔버스에 작성하고 그 사실을 베 지어 곡선으로 적용하여 시작합니다.

var canvas = document.getElementById('canvas'); 
 
var ctx = canvas.getContext('2d'); 
 

 
var hw = 10, ho = hw/2; 
 

 
var x1 = 50, y1 = 20, 
 
    x2 = 230, y2 = 100, 
 
    cp1x = 120, cp1y = 20, 
 
    cp2x = 160, cp2y = 100; 
 
    
 

 
ctx.beginPath(); 
 
ctx.moveTo(x1,y1); 
 
ctx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x2, y2); 
 
ctx.stroke(); 
 

 
ctx.fillStyle = 'blue'; 
 
// start point 
 
ctx.fillRect(x1 - ho, y1 - ho, hw, hw); 
 
// end point 
 
ctx.fillRect(x2 - ho, y2 - ho, hw, hw); 
 

 
ctx.fillStyle = 'red'; 
 
// control point one 
 
ctx.fillRect(cp1x - ho, cp1y - ho, hw, hw); 
 
// control point two 
 
ctx.fillRect(cp2x - ho, cp2y - ho, hw, hw);
<canvas id="canvas"></canvas>

관련 문제