Rumah  >  Artikel  >  hujung hadapan web  >  Bagaimana untuk Melukis Lengkung Licin dalam Kanvas dengan Berbilang Mata?

Bagaimana untuk Melukis Lengkung Licin dalam Kanvas dengan Berbilang Mata?

Barbara Streisand
Barbara Streisandasal
2024-11-02 00:30:30225semak imbas

How to Draw Smooth Curves in Canvas with Multiple Points?

Cara Melukis Lengkung Licin dengan Berbilang Mata dalam JavaScript dan Kanvas HTML5

Isu:

Mencipta lengkung licin dalam aplikasi lukisan dengan menggabungkan titik sampel dengan fungsi "curveTo" mengakibatkan kekusutan akibat titik kawalan terputus.

Penyelesaian:

Untuk melukis lengkung licin melalui N titik, pendekatan alternatif ialah "melengkung ke" titik tengah antara titik berikutnya.

Kod:

<code class="javascript">// Move to the first point
ctx.moveTo(points[0].x, points[0].y);

// Iterate through points
for (var i = 1; i < points.length - 2; i++) {
  // Calculate midpoint
  var xc = (points[i].x + points[i + 1].x) / 2;
  var yc = (points[i].y + points[i + 1].y) / 2;

  // Create quadratic curves to midpoints
  ctx.quadraticCurveTo(points[i].x, points[i].y, xc, yc);
}

// Curve through the last two points
ctx.quadraticCurveTo(
  points[i].x,
  points[i].y,
  points[i + 1].x,
  points[i + 1].y
);</code>

Penjelasan:

Kaedah ini menghampiri lengkung licin dengan mencantumkan lengkung di titik tengah titik bersebelahan. Setiap lengkung terputus berkongsi titik akhir tetapi dipengaruhi oleh titik kawalan sepunya, menghasilkan peralihan yang lancar pada titik bersilang.

Nota:

Walaupun pendekatan ini tidak melalui setiap titik sampel seperti yang dinyatakan pada asalnya dalam tajuk soalan, ia menghasilkan lengkung halus yang tidak dapat dibezakan secara visual yang mencukupi untuk kebanyakan aplikasi lukisan.

Atas ialah kandungan terperinci Bagaimana untuk Melukis Lengkung Licin dalam Kanvas dengan Berbilang Mata?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn