Mục lục:

Hướng dẫn lập trình thú vị cho nhà thiết kế - Kiểm soát quy trình chương trình- Tuyên bố vòng lặp: 8 bước
Hướng dẫn lập trình thú vị cho nhà thiết kế - Kiểm soát quy trình chương trình- Tuyên bố vòng lặp: 8 bước

Video: Hướng dẫn lập trình thú vị cho nhà thiết kế - Kiểm soát quy trình chương trình- Tuyên bố vòng lặp: 8 bước

Video: Hướng dẫn lập trình thú vị cho nhà thiết kế - Kiểm soát quy trình chương trình- Tuyên bố vòng lặp: 8 bước
Video: Điểm nóng thế giới 29/1: Nga đột ngột kéo tên lửa áp sát nước EU đã từ chối đàm phán với ông Putin 2024, Tháng bảy
Anonim
Hướng dẫn lập trình thú vị cho nhà thiết kế - Kiểm soát quy trình chương trình- Tuyên bố vòng lặp
Hướng dẫn lập trình thú vị cho nhà thiết kế - Kiểm soát quy trình chương trình- Tuyên bố vòng lặp

Kiểm soát quy trình chương trình- Tuyên bố vòng lặp

Từ chương này, bạn sẽ tiếp xúc với Tuyên bố vòng lặp kiến thức quan trọng và mạnh mẽ.

Trước khi đọc chương này, nếu bạn muốn vẽ 10 000 vòng tròn trong chương trình, bạn chỉ có thể làm với một phương pháp khủng khiếp. Đó là viết 10, 000 dòng mã hình elip. Những nhà thiết kế mã lười biếng, những người muốn nâng cao hiệu quả bằng mọi cách, chắc chắn sẽ không cho phép điều này xảy ra. Vì vậy, câu lệnh lặp được tạo ra. Với câu nói này, bạn có thể trực giác cảm nhận được sức mạnh của tự động hóa máy tính.

Bước 1: Đối với vòng lặp

Có rất nhiều câu lệnh lặp, trong đó câu lệnh được sử dụng rộng rãi nhất là For Loop. Chúng ta đều biết rằng chức năng vẽ liên tục hoạt động tuần hoàn. Bắt đầu từ câu đầu tiên khi bắt đầu, nó sẽ triển khai từ trên xuống dưới cho đến câu cuối cùng. Sau khi kết thúc một thao tác, nó sẽ bắt đầu lại từ câu đầu tiên. Câu lệnh for hơi giống với hàm draw. Mã trong câu lệnh for có thể được thực thi nhiều lần.

Đây là cấu trúc ngữ pháp của nó:

For (biểu thức 1; biểu thức 2; biểu thức 3) {

Vòng cơ thể

}

Rõ ràng, các câu trong phần thân của vòng lặp là những gì chúng ta mong đợi được thực hiện lặp đi lặp lại. Biểu thức 1 dùng để khởi tạo và gán giá trị đầu tiên cho biến vòng lặp. Biểu thức 2 là cho điều kiện vòng lặp. Biểu thức 3 sẽ cập nhật giá trị biến vòng lặp.

Biến vòng lặp là gì? Nó thực sự tương đương với một biến cục bộ. Hãy xem qua một bài viết hoàn chỉnh.

for (int i = 0; i <10; i ++) {

Vòng cơ thể

}

Để thực hiện chức năng vòng lặp, câu lệnh for chủ yếu dựa vào một biến cục bộ, biến này sẽ được sử dụng khi kết thúc vòng lặp. Biến cục bộ trong ví dụ trên là i. Biểu thức 1 đã hoàn thành việc khởi tạo biến cục bộ. Sau đó, mỗi khi vòng lặp hoạt động một lần, biến này phải được cập nhật. Trong số các ví dụ trên, i ++ trong biểu thức 3 được sử dụng để thực hiện chức năng cập nhật. Thông qua đó, biến sẽ tăng lên 1 mỗi khi được cập nhật. Cuối cùng, mã trong phần thân của vòng lặp không thể lặp vô hạn, nếu không thì các câu lệnh sau không thể được thực thi. Do đó, chúng ta cần một điều kiện đầu cuối. Express 2 chỉ dành cho nó. Ở đây, chương trình sẽ đánh giá xem tôi có nhỏ hơn 10. Nếu đúng, thì hãy tiếp tục hoạt động. Nếu không, hãy nhảy ra khỏi vòng lặp.

Do đó, chuỗi hoạt động của câu lệnh for giống như thế này.

Biểu thức 1 (Khởi tạo biến cục bộ)

Biểu thức 2 (Hài lòng, sau đó tiếp tục hoạt động)

Vòng cơ thể (Vòng tuần hoàn đầu tiên)

Biểu thức 3 (Cập nhật)

Biểu thức 2 (Hài lòng, sau đó tiếp tục hoạt động)

Vòng cơ thể (Vòng tròn thứ hai)

Biểu thức 3 (Cập nhật)

Biểu thức 2 (Hài lòng, sau đó tiếp tục hoạt động)

Vòng cơ thể (Vòng tuần hoàn thứ ba)…

Biểu thức 3 (Cập nhật)

Biểu thức 2 (Không hài lòng, sau đó nhảy ra khỏi vòng lặp)

Bạn có thể mô phỏng trình tự thực hiện này trong đầu vài lần. Nhưng không thể thực sự hiểu mã nếu không gõ nó bằng tay một lần. Khi chúng ta muốn tìm ra một khái niệm lạ, chúng ta có thể in giá trị trong bảng điều khiển thông qua câu lệnh println.

Ví dụ về mã (5-1): void setup () {

for (int i = 0; i <10; i ++) {

println ("chạy");

}

}

Bạn có thể đếm số lần chạy đầu ra trong bảng điều khiển. Đây, chính xác là 10. Điều này cho bạn biết mã trong phần thân vòng lặp đã được thực thi bao nhiêu lần. Tuy nhiên, chúng tôi vẫn không thể phát hiện ra những thay đổi nào đã thực sự xảy ra trong vòng lặp. Vì vậy, chúng ta có thể thử thay đổi ký tự "chạy thành biến" i ", và xem điều gì sẽ xảy ra.

Ví dụ về mã (5-2): void setup () {

for (int i = 0; i <10; i ++) {

println (i);

}

}

Bây giờ, chúng ta có thể thấy giá trị i trong thân vòng lặp đang liên tục tăng lên. Sau đó, chúng ta có thể sử dụng giá trị này để hiểu quy trình hiện tại của vòng lặp.

Trong ví dụ mã (5-2), giá trị của i được thay đổi từ 0 thành 9. So với số lần lặp thực tế, nó dường như luôn ít hơn 1. Nếu bạn chưa quen với nó, biểu thức trong ngoặc của câu lệnh for có thể được viết như sau:

for (int i = 1; i <= 10; i ++)

Do đó, i đúng tương ứng với thời gian của vòng lặp. Ý nghĩa của "<=" nhỏ hơn và bằng. Vì vậy, khi tôi bằng 10, nó vẫn sẽ thỏa mãn điều kiện. Do đó, nó sẽ hoạt động thêm một lần nữa so với khi được viết thành i <10. Mặc dù nó bắt đầu từ 1, thời gian lặp vẫn là 10. Tất nhiên, nếu không có gì đặc biệt cần thiết, tôi khuyên bạn nên áp dụng phương pháp viết trong ví dụ ở phần đầu. Sau đó, chúng tôi sẽ giới thiệu vectơ hoặc mảng cho bạn, cả hai đều lấy phần tử của nó bằng chỉ số con của nó. Và các chỉ số con được mặc định đều bắt đầu từ 0. Để xác định giá trị ban đầu là 0 là một cách tương đối phổ biến.

Trong ví dụ trên, nếu chúng ta viết i vượt quá 0, pogram sẽ sụp đổ. Bởi vì biến đang tăng hằng số, nó sẽ không bao giờ thỏa mãn điều kiện này. Điều này giống như nó không bao giờ được dừng lại để chương trình chạy vào vòng lặp vô tận.

Các biến cục bộ trong câu lệnh for không chỉ có thể khai báo kiểu plastic mà còn có thể khai báo các biến trong kiểu dấu phẩy động. Ví dụ, nó có thể được viết là (float i = 0; i <10; i + = 0.02).

Bước 2: Sử dụng vòng lặp để giải quyết các vấn đề toán học

Bạn có còn nhớ một câu chuyện của nhà toán học Gauss thời thơ ấu của mình? Khi đó, Guass 10 tuổi. Giáo viên của anh ấy muốn giao một nhiệm vụ trong lớp và câu hỏi là

1+2+3+4……+97+98+99+100=?

Nếu bạn tính toán bằng tay, bạn sẽ mất nhiều thời gian. Nhưng Guass dường như đã tìm ra phương pháp tính tổng của dãy số học rồi. Vì vậy, ngay sau khi câu hỏi được đưa ra, anh ấy đã nói ra câu trả lời một cách dễ dàng, điều này đã làm cho giáo viên của anh ấy vô cùng ngạc nhiên.

Bây giờ, chúng ta có thể vẫn không nhớ tổng của dãy số học là gì nhưng chúng ta có thể nhận được câu trả lời một cách thô sơ và bạo lực. Và đó là vòng lặp for. Vì nó chỉ là một miếng bánh nhỏ để máy tính đếm, chúng ta phải mô tả câu hỏi thành một ngôn ngữ mà máy tính có thể nhận dạng được thì chúng ta mới có thể dễ dàng nhận được câu trả lời của mình.

Ví dụ về mã (5-3):

void setup () {

int answer = 0;

for (int i = 1; i <= 100; i ++) {

answer + = i;

}

println (câu trả lời);

}

Tôi tin rằng kết quả bạn nhận được giống với câu trả lời mà Guass đã báo cáo: đó là 5050!

Lời khuyên: Tên của các biến cục bộ trong vòng lặp for có thể thay đổi theo ý muốn với điều kiện phải tuân theo các quy định về đặt tên biến. Bạn có thể viết nó thành (int k = 1; k <= 100; k ++). Nếu không có điều kiện đặc biệt nào xảy ra, nó sẽ mặc định i là tên của biến.

Bước 3: Để vẽ vòng lặp

Sau một loạt chăn ga gối đệm có vẻ nhàm chán, cuối cùng chúng ta cũng có thể đến với một phần thú vị hơn. Đó là sử dụng vòng lặp for để vẽ hình. Bây giờ chúng ta có thể bỏ những phép tính toán học tẻ nhạt đó sang một bên. Các nhà thiết kế của chúng tôi nhạy cảm hơn với đồ họa.

Sử dụng For Loop để vẽ một mảng hình tròn

Khi chúng ta muốn sử dụng vòng lặp for để biểu diễn một nhóm các phần tử lặp lại, chúng ta phải đảm bảo mối quan hệ tương đối số của các phần tử này trước, sau đó chúng ta có thể sử dụng vòng lặp for để nhận ra nó một cách thuận tiện thay vì thực hiện công việc lặp lại lớn. Giả sử nếu chúng ta muốn vẽ một hàng hình tròn trải đều theo phương ngang. Tọa độ trinh tiết của nó không thay đổi trong khi tọa độ ngang của nó được thay đổi. Và từ trái sang phải, tọa độ ngang không ngừng tăng lên và khoảng cách tăng dần là như nhau. Lúc này, chúng ta có thể sử dụng i trong vòng lặp for để lấy tọa độ ngang của mỗi đường tròn.

Ví dụ về mã (5-4): void setup () {

kích thước (700, 700);

nền (83, 51, 194);

noStroke ();

}

void draw () {

for (int i = 0; i <7; i ++) {

hình elip (50.0 + i * 100.0, chiều cao / 2.0, 80.0, 80.0);

}

}

50 là vị trí bắt đầu của vòng tròn đầu tiên bên trái. 100 in i * 100 đại diện cho khoảng cách ngày càng tăng.

Bước 4: Sử dụng cho Vòng lặp để vẽ một điểm vòng ngẫu nhiên

Vị trí đồ họa trên có thể đoán trước được. Điều này sẽ giảm thiểu rất nhiều tiền lãi. Chúng ta có thể sử dụng hàm ngẫu nhiên mà chúng ta đã tham khảo trong chương trước và cố gắng viết nó trong hàm vẽ.

Ví dụ về mã (5-5):

void setup () {

kích thước (700, 700);

nền (0);

noStroke ();

}

void draw () {

nền (0);

for (int i = 0; i <10; i ++) {

float randomWidth = random (60.0);

ellipse (ngẫu nhiên (chiều rộng), ngẫu nhiên (chiều cao), chiều rộng ngẫu nhiên, chiều rộng ngẫu nhiên);

}

}

Ở đây, lý do tại sao vị trí của vòng tròn liên tục nhấp nháy là vì mỗi lần hàm ngẫu nhiên hoạt động một lần, kết quả là ngẫu nhiên. Bởi vì chức năng vẽ được mặc định chạy 60 khung hình mỗi giây, vì vậy cứ 10 vòng tròn được vẽ trong một giây sẽ thay đổi vị trí của nó trong 60 lần. Đèn flash nhanh này làm cho bức ảnh dường như chỉ có hơn 10 vòng tròn. Thay đổi một giá trị đơn giản trong chương trình sẽ mang lại cho bạn một hiệu ứng hoàn toàn khác. Chúng ta có thể thay đổi thời gian của vòng lặp bằng cách sửa đổi điều kiện đầu cuối. Điều kiện đầu cuối trong hình dưới đây là i <100

  1. Đây là hiệu ứng khi điều kiện đầu cuối là i <1000:
  2. Hạt giống ngẫu nhiên
  3. Nếu tôi không muốn vị trí của vòng tròn được tạo ngẫu nhiên cũng như đèn flash của nó, tôi có thể làm gì? Một phương pháp là xây dựng và lưu trữ các biến độc lập cho mỗi vòng kết nối và khởi tạo các biến này trong quá trình thiết lập. Gán các biến này một giá trị ngẫu nhiên. Do đó, khi sử dụng hàm vẽ trong draw, những gì chúng ta gọi là giá trị được lưu trữ trong các biến. Nó sẽ không thay đổi bất cứ lúc nào. Để vẽ 10 vòng tròn, chúng ta có thể sử dụng phương pháp này. Nhưng nếu chúng ta muốn vẽ 1000 vòng tròn, hoặc 10, 000 vòng tròn thì sao? Sẽ khá rắc rối nếu chúng ta sử dụng phương pháp truyền thống để xây dựng các biến này và đặt tên cho nó. Chúng ta không cần phải học một phương pháp xây dựng biến mới. Dưới đây là một phương pháp linh hoạt có thể giúp chúng ta đạt được mục tiêu này. Đó là sử dụng randomSeed. Bây giờ, chúng ta hãy xem tác dụng của nó sau khi sử dụng. Ví dụ mã (5-6): [cceN_cpp theme = "rạng đông"] void setup () {size (700, 700); background (0); noStroke ();}
  4. void draw () {

    nền (0);

    randomSeed (1);

    for (int i = 0; i <10; i ++) {

    float randomWidth = random (20.0, 60.0);

    ellipse (ngẫu nhiên (chiều rộng), ngẫu nhiên (chiều cao), chiều rộng ngẫu nhiên, chiều rộng ngẫu nhiên);

    }

    } [/cceN_cpp]

    So với mã trước đó, nó không có bất kỳ thay đổi nào ngoại trừ việc làm cho phạm vi bán kính của vòng tròn thay đổi từ 10 đến ngoài 30 chỉ với một câu củaSeedRandom. Sau khi được thêm vào câu này, đồ họa dường như trở nên tĩnh.

    Định dạng Gọi:

    randomSeed (a);

    Trong số định dạng này, cài đặt của a là hạt giống. Bạn phải điền một số nguyên (viết giá trị điểm dư trong P5, nó sẽ không sai nhưng coi nó như một số nguyên) vào đó. Chức năng của randomSeed là đặt hạt giống cho giá trị ngẫu nhiên. Sau đó, nó sẽ tạo ra các mảng ngẫu nhiên khác nhau theo hạt giống khác nhau. Sau đó, chúng tôi gọi hàm ngẫu nhiên để kết quả trả về là xác định. Ở đây, định nghĩa không dành cho kết quả là một giá trị xác định mà dành cho mảng được tạo. Điều đó có nghĩa là kết quả trả về là xác định liên quan đến thời gian gọi.

    Ví dụ về mã (5-7): [cceN_cpp theme = "normal"] void setup () {

    randomSeed (0);

    for (int i = 0; i <5; i ++) {

    println (ngẫu nhiên (10));

    }

    } [/cceN_cpp]

    Bây giờ chúng ta tiếp tục sử dụng println để thực hiện một thử nghiệm. Sau khi sử dụng randomSeed, mỗi khi bạn đóng chương trình và khởi động lại chương trình, nó sẽ trả về một chuỗi kết quả giống nhau. Giá trị sẽ tương ứng với từng dãy một. Nếu bạn xóa nó, sau đó mỗi lần nó sẽ trở lại giá trị khác nhau. Tại sao nó có cài đặt này? Đó là vì bản thân giá trị ngẫu nhiên trong chương trình là giả ngẫu nhiên. Kết quả có vẻ ngẫu nhiên nhưng thực ra nó được tạo ra bởi một phương pháp tính toán cố định và có thể lặp lại. Nó tương đương với việc chỉ định một giá trị nguyên thủy cho randomSeed, sau đó kết quả sau đây sẽ được tính theo hạt giống này. Tuy nhiên, nếu chúng ta không chỉ định hạt giống, chương trình sẽ mặc định sử dụng thời điểm hiện tại của hệ thống để tạo hạt giống. Do đó kết quả của mọi hoạt động là khác nhau. Ví dụ dưới đây có thể giúp bạn hiểu rõ hơn về randomSeed.

    Mã mẫu (5-8): [cceN_cpp theme = "normal"] void setup () {

    kích thước (700, 700);

    nền (0);

    noStroke ();

    }

    void draw () {

    randomSeed (1);

    for (int i = 0; i <10; i ++) {

    float randomWidth01 = random (10, 60);

    ellipse (ngẫu nhiên (chiều rộng), ngẫu nhiên (chiều cao), randomWidth01, randomWidth01);

    println (randomWidth01);

    }

    randomSeed (1);

    for (int i = 0; i <10; i ++) {

    float randomWidth02 = random (10, 60);

    ellipse (ngẫu nhiên (chiều rộng), ngẫu nhiên (chiều cao), randomWidth02, randomWidth02);

    println (randomWidth02);

    }

    } [/cceN_cpp]

    Cố gắng sửa đổi randomSeed thứ hai (1) thành randomSeed (0) và so sánh kết quả cuối cùng.

    Lời khuyên: Trong P5, chúng ta chỉ phải gọi hàm noLoop ở cuối bài vẽ để chúng ta có thể có được hiệu ứng tương tự. Chức năng của nó là kết thúc chương trình. Nó hoàn toàn khác với các nguyên tắc làm việc trên về bản chất.

Bước 5: Sử dụng cho Vòng lặp để Vẽ Đường

Sau khi chúng ta đã thành thạo cách sử dụng randomSeed, chúng ta có thể thử thay đổi chức năng vẽ. Ví dụ, thay đổi bản vẽ đường tròn thành bản vẽ đường thẳng. Chỉ khi chúng tôi thiết kế một số quy định thay đổi đến cuối dòng, chúng tôi có thể sử dụng rất nhiều dòng quấn vào nhau để tạo thành một mẫu độc đáo.

Ví dụ về mã (5-9):

[cceN_cpp theme = "rạng đông"] void setup () {

kích thước (700, 700);

nền (0);

}

void draw () {

randomSeed (0);

for (int i = 0; i <2000; i ++) {

float x1 = width / 2.0;

float x2 = random (50.0, 650.0);

đột quỵ (255, 20);

dòng (x1, 50, x2, 650);

}

} [/cceN_cpp]

Tạo bàn chải đơn giản

Quay lại vòng lặp for một lần nữa. Các ví dụ trên không tương tác. Nếu chúng ta muốn làm cho kết quả trở nên thú vị hơn, chúng ta không thể quên kết hợp mouseX và mouseY vào mã của mình.

Ví dụ về mã (5-10):

[cceN_cpp theme = "rạng đông"] void setup () {

kích thước (700, 700);

nền (255);

noStroke ();

}

void draw () {

for (int i = 0; i <1000; i ++) {

điền (0, 30);

float x = mouseX + random (-50, 50);

float y = mouseY + random (-50, 50);

hình elip (x, y, 2, 2);

}

} [/cceN_cpp]

Một bàn chải "điểm phân tán" được tạo ra. Bởi vì mọi điểm tròn nhỏ chuyên sâu đều được đặt tại vị trí của con chuột, nó có thể di chuyển các hướng hạn chế từ bốn hướng trái, phải, lên và xuống. Vì vậy, hình dạng cuối cùng của cọ tán tương tự như một hình vuông.

Ví dụ về mã (5-11):

[cceN_cpp theme = "rạng đông"] void setup () {

kích thước (700, 700);

nền (255);

noStroke ();

}

void draw () {

for (int i = 0; i <1000; i ++) {

tỷ lệ float = chiều rộng mouseX / (float);

float x = mouseX + random (-50, 50);

float y = mouseY + random (-50, 50);

fill (0, ratio * 255, 255 * (1 - ratio), 30);

hình elip (x, y, 2, 2);

}

}

[/cceN_cpp]

Nếu chúng ta sử dụng giá trị của mouseX để ảnh hưởng đến màu tô, thì chúng ta sẽ nhận được một gradient màu kỳ diệu hơn nhiều.

Bước 6: Đối với Vòng lặp lồng nhau

Vòng lặp for có thể được lồng vào nhau. Bạn có thể viết lại vòng lặp for vào vòng lặp for. Khi cần vẽ ma trận điểm hai chiều, bạn có thể chọn phương pháp này.

Ví dụ về mã (5-12):

[cceN_cpp theme = "rạng đông"] void setup () {

kích thước (700, 700, P2D);

nền (202, 240, 107);

}

void draw () {

điền (0);

for (int i = 0; i <5; i ++) {

for (int j = 0; j <5; j ++) {

float x = 150 + i * 100;

float y = 150 + j * 100;

hình elip (x, y, 60, 60);

println (i + ":" + j);

}

}

}

[/cceN_cpp]

Để sử dụng vòng lặp lồng nhau lần đầu tiên, bạn phải tìm ra các quan hệ logic của nó. Việc thực hiện mã trong chương trình luôn luôn là từ trên xuống dưới. Do đó, lần đầu tiên được thực hiện chắc chắn là vòng lặp ngoài cùng. Mỗi khi vòng lặp bên ngoài hoạt động một lần, vòng lặp bên trong sẽ liên tục hoạt động cho đến khi nó không thể thỏa mãn điều kiện nữa. Sau đó, nó sẽ bắt đầu hoạt động vòng lặp bên ngoài thứ hai. Sau khi thao tác thứ hai bắt đầu, vòng lặp nội bộ sẽ tiếp tục triển khai cho đến khi nó không thể thỏa mãn điều kiện. Nó lặp lại như vậy cho đến khi tất cả các điều kiện không thể được thỏa mãn và nó nhảy ra khỏi vòng lặp.

Trong đoạn mã trên, phần thân vòng lặp trong vòng lặp ngoài đã hoạt động tổng cộng 5 lần, trong khi phần thân vòng lặp trong vòng lặp bên trong đã hoạt động 25 lần. Trong vòng 25 lần, theo sự khác biệt của giá trị i, j, chúng ta có thể đảm bảo tọa độ ngang và dọc của đường tròn một cách riêng biệt. Tôi đã nhúng một phần của bản in, bạn có thể quan sát đầu ra dữ liệu và suy nghĩ về sự thay đổi của nó. Chỉ với hai vòng lặp lồng nhau, chúng ta có thể trải nghiệm tất cả các kết hợp của dữ liệu i, j.

Lời khuyên

Vòng lặp For ở lớp thứ hai thường ngưng tụ với Tab ở đầu. Điều này có thể làm cho cấu trúc mã rõ ràng hơn. Bạn phải đặt tên cho các biến cục bộ trong hai lớp của vòng lặp for với các tên khác nhau. Trong đó, "i", "j", "k" được sử dụng phổ biến nhất.

Sử dụng linh hoạt "i", "j"

Hai tên biến "i", "j" đại diện cho các biến cục bộ của hai lớp vòng lặp for. Ví dụ dưới đây sẽ giúp bạn hiểu sâu hơn về "i" "j". Theo giá trị khác nhau của "i", "j", chúng ta có thể nhập các tham số để nhóm các phần tử.

Ví dụ về mã (5-13): [cceN_cpp theme = "normal"] void setup () {

kích thước (700, 700);

nền (0);

noStroke ();

}

void draw () {

nền (0);

điền vào (250, 233, 77);

for (int i = 0; i <7; i ++) {

for (int j = 0; j <7; j ++) {

pushMatrix ();

dịch (50 + i * 100, 50 + j * 100);

// Cài đặt 1

// float angle = sin (millis () / 1000.0) * PI / 2;

// Cài đặt 2

// tỷ lệ float = i / 7.0;

// float angle = sin (millis () / 1000.0 + ratio * (PI / 2)) * PI / 2;

// Cài đặt 3

tỷ lệ float = (i * 7 + j) /49.0;

float angle = sin (millis () / 1000.0 + ratio * (PI / 2)) * PI / 2;

xoay (góc);

DirectMode (TRUNG TÂM);

// Vẽ hình 1

trực tràng (0, 0, 80, 80);

// Vẽ hình 2

// trực tràng (0, 0, 100, 20);

// Vẽ hình 3

// direct (0, 0, ratio * 50);

popMatrix ();

}

}

} [/cceN_cpp]

Giải thích mã

DirectMode (CENTER) có thể thay đổi cách vẽ của hình vuông. Hai tham số oringinal trước đây của trực tràng được sử dụng để xác định tọa độ của góc trên bên trái của hình vuông. Sau khi chúng ta bắt đầu lệnh này, hai tham số này sẽ được sử dụng để thiết lập tọa độ cho tâm hình vuông. Bởi vì ở đây chúng ta vận hành phép quay paterrn thông qua phép quay, vì vậy chúng ta cần sử dụng phương pháp này để vẽ điểm trung tâm đến điểm ban đầu của tọa độ.

millis () lấy thời gian từ khi bắt đầu chương trình đến hiện tại, đơn vị là ms, giá trị này sẽ ảnh hưởng đến tốc độ thay đổi của giá trị đầu ra sin. Nếu chúng ta viết trực tiếp mili, tỷ lệ thay đổi là quá lớn. Vì vậy, chúng ta phải chia nó cho 1000,0.

Trong phần mã này, chúng tôi sử dụng ký hiệu nhận xét "//" để ẩn một số cài đặt. Bạn có thể thay đổi các hiệu ứng bằng cách bắt đầu hoặc đóng. Ví dụ, nếu chúng ta bắt đầu các câu đằng sau "Cài đặt 3", chúng ta phải sử dụng biểu tượng chú thích để đóng các khối mã là "Cài đặt 1" và "Cài đặt 2". Đối với các ví dụ về cấu trúc chương trình tương tự này với các biến cục bộ khác nhau, chúng ta có thể viết ở định dạng này. Vì vậy, chúng tôi không phải lưu trữ một số tài liệu kỹ thuật riêng biệt. Chúng ta có thể sử dụng kỹ năng này thường xuyên trong quá trình thực hành và tạo cũng như duy trì một số cài đặt tham số thỏa mãn.

Trong đó, ảnh hưởng của giá trị i, j đến chương trình chủ yếu được thể hiện bằng dịch chuyển "Thiết lập 1 (Thiết lập 2) (Thiết lập 3)". Bạn có thể so sánh kết quả đầu ra bên dưới.

Vẽ hình 1: Cài đặt 1

Vẽ hình 1: Cài đặt 2

Vẽ hình 1: Cài đặt 3

Vẽ hình 2: Cài đặt 1

Vẽ hình 2: Cài đặt 2

Vẽ hình 2: Thiết lập 3

Trong thiết lập 1, chúng tôi đã không sử dụng i và j để ảnh hưởng đến góc xoay của mỗi phần tử. Vì vậy, chúng ta có thể thấy chuyển động của mọi phần tử là như nhau. Trong khi cài đặt 2, chúng tôi đã sử dụng giá trị i và cả i và j trong cài đặt 3. Cuối cùng chúng đã ảnh hưởng đến đầu vào tham số của hàm sin thông qua tỷ lệ. Điều này đã thay đổi sự thay đổi tuần hoàn của góc. Do hiệu ứng thực tế của cài đặt 2 và cài đặt 3 không quá rõ ràng trong đồ họa động, chúng ta có thể quan sát nó từ ảnh chụp màn hình sau.

Vẽ Hình 2 (Trái: Cài đặt 2; Phải: Cài đặt 3)

Vẽ Hình 3 (Trái: Cài đặt 2; Phải: Cài đặt 3)

Trong hình đầu tiên, tỷ lệ được sử dụng để ảnh hưởng đến góc xoay hình vuông. Trong khi hình thứ hai, nó được sử dụng để kiểm soát trực tiếp bán kính của hình tròn. Chúng ta có thể thấy rằng nó đã sử dụng câu i value:

tỷ lệ float = i / 7,0;

Sự thay đổi phần tử theo chiều của nó là nhất quán. Bởi vì tọa độ ngang để điều khiển hình ảnh chỉ phụ thuộc vào giá trị của i, vì vậy các mẫu có cùng tọa độ ngang sẽ giống nhau. Và giá trị của tỷ lệ, góc quay và bán kính của hình tròn cũng vậy.

Đồng thời, chúng ta sử dụng câu i, j:

tỷ lệ float = (i * 7 + j) /49.0;

Nó có thể mô tả "gradient". Ở đây, với phương pháp nhân một thừa số, nó đã kết hợp ảnh hưởng của hàng và cột. Vì vậy, mỗi yếu tố là khác nhau.

Bước 7: Vòng lặp trong khi

Có một người anh em cho vòng lặp for. Đó là vòng lặp while. Vòng lặp for có thể làm được gì thì vòng lặp while cũng có thể làm được điều đó. Nhưng tần suất sử dụng vòng lặp while trong CreativeCoding không cao như vòng lặp for.

Ví dụ về mã (5-14): [cceN_cpp theme = "normal"] void setup () {

int a = 0;

while (a <10) {

println (a);

a ++;

}

} [/cceN_cpp]

Cấu trúc ngữ pháp của while dễ hiểu hơn for. Chúng ta có thể tạo các biến trước câu lệnh while. Sau đó điền vào một biểu thức trong dấu ngoặc vuông. Khi nó được thỏa mãn, sau đó vận hành các câu trong phần thân của vòng lặp. Cuối cùng, chúng ta đặt một biểu thức trong phần thân của vòng lặp để cập nhật các biến, sau đó vòng lặp while kết thúc. Đối với thời gian của vòng lặp đảm bảo, chúng tôi thường sử dụng vòng lặp for. Đối với giá trị biến không xác định, chúng tôi khuyên bạn nên sử dụng vòng lặp while.

Nghĩ:

Cố gắng sử dụng tất cả các loại phần tử cơ bản để thay thế các phần tử vẽ trong vòng lặp for để tạo ra nhiều loại bút vẽ khác nhau.

Kết hợp với hàm lượng giác được đề cập trong chương trước, cố gắng sửa lại bàn chải "điểm phân tán" thành bàn chải hình tròn.

Cố gắng tạo ma trận điểm hai chiều chỉ với vòng lặp for.

Xem trước chương tiếp theo Với khóa học này, bạn sẽ tìm thấy mọi kiến thức mới mà bạn học được, khả năng chơi ngay lập tức sẽ tăng lên rất nhiều. Chương trình là một hộp pandora. Tất cả mọi thứ bạn có thể tưởng tượng, nó có thể làm điều đó cho bạn. Vì vậy, không có lý do gì để chúng ta không học ngôn ngữ có thể giao tiếp với máy tính này. Trong chương tiếp theo của chúng tôi, chúng tôi sẽ giới thiệu một câu lệnh điều khiển quy trình khác nếu cho bạn. Nó có thể kiểm soát luồng quy trình và tạo ra các kết quả phức tạp hơn và có thể thay đổi được. Với câu lệnh if, bạn có thể tạo các trò chơi phiêu lưu văn bản của riêng mình một cách dễ dàng! Bài viết này đến từ nhà thiết kế Wenzy. –Xem hình ảnh của bạn chạy (Phần một) Hướng dẫn lập trình thú vị cho nhà thiết kế – Chạy hình ảnh của bạn (Phần hai)

Bước 8: Nguồn

Bài viết này từ:

Nếu bạn có bất kỳ câu hỏi nào, bạn có thể liên hệ với : [email protected].

Đề xuất: