Return to Video

Resizing shapes with variable expressions

  • 0:00 - 0:02
    Chúng ta sẽ trở lại với Winston.
  • 0:02 - 0:06
    Giờ ta có cả biến 'x' và 'y' dành cho
  • 0:06 - 0:07
    vị trí của Winston.
  • 0:07 - 0:09
    Vì vậy, ta có thể di chuyển anh ta sang hai bên,
  • 0:10 - 0:12
    lên và xuống, woo!
  • 0:12 - 0:13
    Đẹp quá.
  • 0:14 - 0:16
    Bây giờ, hãy thiết lập lại giá trị các biến
  • 0:16 - 0:19
    thành 200 và 200
  • 0:19 - 0:22
    và xem lại cách chương trình hoạt động.
  • 0:23 - 0:26
    Vì vậy, từ chỗ này, ta đã có biến 'eyeSize'.
  • 0:26 - 0:28
    Nó dùng để điều chỉnh kích thước mắt,
  • 0:28 - 0:30
    bởi vì đôi mắt có chiều rộng 40 pixel
  • 0:30 - 0:32
    và cao 40 pixel.
  • 0:32 - 0:35
    Và rồi ta có các biến 'x' và 'y',
  • 0:35 - 0:39
    và đó là vị trí của tâm điểm khuôn mặt.
  • 0:40 - 0:41
    Và ta có thể thấy chúng được dùng
  • 0:41 - 0:43
    trong lệnh ellipse
  • 0:43 - 0:45
    để vẽ một vòng tròn lớn màu vàng.
  • 0:46 - 0:47
    Và sau đó ở dưới đây,
  • 0:47 - 0:49
    dành cho đôi mắt,
  • 0:49 - 0:50
    'x' và 'y' lại được dùng.
  • 0:51 - 0:52
    Và đây nữa,
  • 0:52 - 0:54
    đôi mắt được đặt ở vị trí
  • 0:54 - 0:56
    tương quan với tâm điểm của khuôn mặt.
  • 0:56 - 0:58
    Vì vậy, có lẽ nó lệch
  • 0:58 - 0:59
    50 pixel
  • 0:59 - 1:01
    về phía bên trái của tâm điểm
  • 1:02 - 1:03
    và cái này lệch 100 pixel
  • 1:03 - 1:05
    về phía bên phải của tâm điểm.
  • 1:05 - 1:08
    OK. Khá ổn.
  • 1:08 - 1:09
    và đó là lý do tại sao ta có thể
  • 1:09 - 1:11
    di chuyển Winston lên xuống.
  • 1:11 - 1:13
    Bây giờ, tôi còn muốn điều chỉnh
  • 1:13 - 1:15
    nhiều hơn cho khuôn mặt của Winston
  • 1:15 - 1:17
    với các biến.
  • 1:17 - 1:18
    Nhưng tôi vẫn muốn xem
  • 1:18 - 1:19
    còn thứ gì khác, trong một chương trình,
  • 1:19 - 1:21
    mà ta có thể dùng biến để lưu trữ nữa.
  • 1:21 - 1:21
    Để làm được điều đó
  • 1:21 - 1:23
    tôi sẽ xem
  • 1:23 - 1:24
    từng dòng code
  • 1:24 - 1:25
    và tìm kiếm thứ gọi là
  • 1:25 - 1:27
    các giá trị hard-code (code cứng).
  • 1:28 - 1:29
    Đó là những con số,
  • 1:29 - 1:31
    chỉ riêng số mà thôi,
  • 1:31 - 1:33
    không phải biến hay phụ thuộc vào biến.
  • 1:34 - 1:35
    Hãy bắt đầu từ đây,
  • 1:35 - 1:37
    trong lần gọi lệnh ellipse đầu tiên,
  • 1:38 - 1:39
    ta có 300 và 300
  • 1:39 - 1:41
    ứng với chiều rộng và chiều cao.
  • 1:42 - 1:44
    Đó chỉ là những con số
  • 1:44 - 1:45
    nên hãy tạo một biến
  • 1:45 - 1:46
    để thay thế cho những giá trị đó
  • 1:46 - 1:48
    với tên là faceSize.
  • 1:49 - 1:50
    Và nó lưu giá trị là 300.
  • 1:50 - 1:53
    Giờ ta sẽ viết faceSize,
  • 1:54 - 1:55
    faceSize.
  • 1:56 - 1:57
    OK. Ta tiếp tục.
  • 1:57 - 1:58
    và bỏ qua phần màu sắc.
  • 1:58 - 2:00
    Giờ câu lệnh ellipse cũng vậy.
  • 2:00 - 2:02
    Chúng đều là biến hoặc
  • 2:02 - 2:03
    phụ thuộc vào biến
  • 2:03 - 2:04
    vì vậy tạm thời
  • 2:04 - 2:05
    ta sẽ để chúng như vậy.
  • 2:05 - 2:07
    Và sau đó là lệnh mouth
  • 2:07 - 2:09
    cũng phụ thuộc vào 'x' và 'y'
  • 2:09 - 2:10
    nhưng những gì ở đây
  • 2:10 - 2:12
    lại chỉ là những con số độc lập
  • 2:13 - 2:15
    150 và 150.
  • 2:15 - 2:16
    Như vậy ta sẽ có
  • 2:16 - 2:19
    mouthSize, một cái tên hay đấy,
  • 2:19 - 2:20
    bằng 150.
  • 2:22 - 2:25
    Ta sẽ thay thế chỗ này bằng mouthSize
  • 2:25 - 2:27
    và mouthSize.
  • 2:28 - 2:29
    Được rồi.
  • 2:29 - 2:31
    Ta lưu kích thước của các hình vẽ
  • 2:31 - 2:33
    trong các biến ở trên cùng
  • 2:33 - 2:35
    để ta có thể thực sự dễ dàng
  • 2:35 - 2:36
    thay đổi kích thước
  • 2:36 - 2:37
    như thế này, như thế này...
  • 2:37 - 2:39
    Wooo Winston đang đói
  • 2:39 - 2:41
    và sau đó kiểu như, bạn biết đấy,
  • 2:41 - 2:43
    Winston đói và
  • 2:43 - 2:44
    rồi anh ta ăn rất nhiều bánh rán
  • 2:44 - 2:46
    và sau đó trở nên siêu bự.
  • 2:46 - 2:48
    Ổn rồi.
  • 2:48 - 2:49
    nhưng có điều gì đó
  • 2:49 - 2:51
    tôi không thích ở chương trình vào lúc này.
  • 2:52 - 2:59
    Nếu tôi để kích thước khuôn mặt rất nhỏ
  • 2:59 - 3:01
    thì nó bắt đầu trông buồn cười
  • 3:01 - 3:03
    vì mắt và miệng
  • 3:03 - 3:05
    đang nhô ra khỏi mặt
  • 3:05 - 3:07
    và tại một số điểm nhất định, nó thậm chí
  • 3:07 - 3:08
    trông chả liên quan gì
  • 3:08 - 3:09
    tới khuôn mặt,
  • 3:09 - 3:11
    hay nó không còn là một khuôn mặt nữa, phải không?
  • 3:12 - 3:14
    Vì vậy, ta thực muốn nó xảy ra
  • 3:14 - 3:16
    là khi thay đổi khuôn mặt
  • 3:16 - 3:18
    ta muốn mắt và miệng -
  • 3:18 - 3:22
    kích thước của chúng thay đổi theo.
  • 3:22 - 3:24
    Vì vậy, nếu tôi đặt FaceSize là một nửa kích thước.
  • 3:24 - 3:27
    Ta muốn miệng cũng bằng một nửa kích thước.
  • 3:27 - 3:29
    Như vậy, nghĩa là,
  • 3:30 - 3:33
    ta muốn tính toán mouthSize và eyeSize
  • 3:33 - 3:36
    bằng vài phần của faceSize.
  • 3:37 - 3:40
    Được rồi, hãy thiết lập lại các biến này
  • 3:40 - 3:42
    và tôi sẽ cho bạn thấy tôi có ý gì.
  • 3:42 - 3:44
    Hãy bắt đầu với mouthSize.
  • 3:44 - 3:45
    Hiện giờ
  • 3:45 - 3:50
    faceSize có kích thước là 300 và mouthSize là 150.
  • 3:50 - 3:52
    Vì vậy, nếu ta nghĩ về
  • 3:52 - 3:53
    sự tương quan của chúng,
  • 3:53 - 3:56
    ta sẽ nói rằng faceSize lớn gấp đôi
  • 3:56 - 3:58
    mouthSize
  • 3:58 - 4:00
    hoặc mouthSize lớn bằng một nửa
  • 4:00 - 4:01
    của faceSize.
  • 4:01 - 4:04
    Và ta có thể viết code như sau
  • 4:04 - 4:08
    1/2 faceSize.
  • 4:08 - 4:10
    OK. Dòng code này nói
  • 4:10 - 4:12
    rằng ta lấy giá trị của faceSize
  • 4:12 - 4:13
    nhân nó với 1/2
  • 4:13 - 4:15
    và lưu vào biến mouthSize
  • 4:16 - 4:17
    để nếu ta thay đổi cái này ở đây
  • 4:18 - 4:20
    nó sẽ biết một nửa giá trị đó là gì
  • 4:20 - 4:22
    và đó chính là mouthSize.
  • 4:22 - 4:24
    Hoàn hảo! Đó là những gì ta muốn
  • 4:25 - 4:27
    Như vậy, bây giờ đến lượt eyeSize,
  • 4:27 - 4:29
    faceSize có giá trị là 300
  • 4:29 - 4:31
    và eyeSize là 40.
  • 4:31 - 4:33
    Như vậy ta cần nó nhận giá trị
  • 4:33 - 4:37
    40/300 của faceSize.
  • 4:37 - 4:39
    tức là, xem nào
  • 4:39 - 4:41
    4/30, ta có thể
  • 4:41 - 4:44
    tối giản thàn 2/15.
  • 4:44 - 4:46
    Như vậy ta có
  • 4:46 - 4:50
    2/15 lần faceSize.
  • 4:50 - 4:51
    Nhân đây,
  • 4:51 - 4:52
    nếu bạn chưa quen với phân số
  • 4:52 - 4:54
    và phần tính toán số học trên làm khó bạn,
  • 4:54 - 4:56
    hãy tìm hiểu thêm về phân số
  • 4:56 - 4:58
    trên Khan Academy
  • 4:58 - 5:00
    và quay lại đây khi bạn
  • 5:00 - 5:00
    cảm thấy sẵn sàng.
  • 5:00 - 5:02
    Ở đây này, bạn chỉ cần truy cập vào đó.
  • 5:03 - 5:04
    OK.
  • 5:04 - 5:06
    Như vậy, hãy thử thay đổi kích thước khuôn mặt một lần nữa.
  • 5:07 - 5:08
    Haha! Kiểm tra nó
  • 5:08 - 5:10
    miệng và mắt thay đổi kích thước
  • 5:10 - 5:12
    cân xứng với khuôn mặt.
  • 5:12 - 5:13
    Nhưng ta nhận thấy
  • 5:13 - 5:15
    có gì đó không đúng ở đây.
  • 5:15 - 5:17
    Mắt và miệng
  • 5:17 - 5:19
    vẫn còn nhô ra khỏi khuôn mặt
  • 5:19 - 5:21
    dù cho chúng có
  • 5:21 - 5:23
    kích thước hợp lý hơn nhiều.
  • 5:23 - 5:25
    Đó là bởi vì ta vẫn còn
  • 5:25 - 5:27
    một số phần hard-code
  • 5:27 - 5:28
    trong các lệnh ellipse của mình.
  • 5:28 - 5:30
    Những con sô đó thực sự cần phải
  • 5:30 - 5:33
    được thay thế bằng tỷ lệ với các biến.
  • 5:33 - 5:35
    Ở đây, tôi sẽ chỉ cho bạn.
  • 5:35 - 5:38
    Như vậy, đối với hình elip vẽ mắt ta có
  • 5:38 - 5:41
    x - 50 để ra vị trí 'x'
  • 5:41 - 5:43
    Điều này có nghĩa là nó luôn luôn bằng 'x - 50'.
  • 5:43 - 5:45
    Ngay cả khi ta đặt faceSize
  • 5:45 - 5:47
    nhỏ hơn 50 pixel.
  • 5:47 - 5:48
    Và nó chắc chắn không có ý nghĩa
  • 5:48 - 5:50
    bởi vì điều đó có nghĩa là
  • 5:50 - 5:50
    mắt trái sẽ
  • 5:52 - 5:55
    Vì vậy nó phải là x trừ đi 1 phần
  • 5:55 - 5:57
    kích thước khuôn mặt
  • 5:57 - 5:59
    và ta có thể tìm ra phân số
  • 5:59 - 6:00
    theo cùng một cách.
  • 6:00 - 6:04
    50 so với 300 ban đầu.
  • 6:04 - 6:08
    50/300, 5/30, 1/6.
  • 6:09 - 6:12
    Như vậy, 1/6 của faceSize.
  • 6:12 - 6:14
    Và ta thấy con số 50 khác ở đây
  • 6:14 - 6:16
    vì vậy ta có thể làm điều tương tự
  • 6:16 - 6:17
    cùng một biểu thức.
  • 6:17 - 6:19
    Ở đây ta có 100/300
  • 6:19 - 6:21
    tức là
  • 6:21 - 6:23
    1/3 faceSize,
  • 6:23 - 6:25
    cái này là 60.
  • 6:25 - 6:26
    Như vậy cuối cùng sẽ
  • 6:26 - 6:29
    là 1/5 lần faceSize
  • 6:29 - 6:32
    Và đây là 50
  • 6:32 - 6:34
    vậy là 1/6 nữa.
  • 6:34 - 6:36
    Và sau đó 40.
  • 6:36 - 6:38
    Đó là những gì ta đã tìm ra ở đây,
  • 6:38 - 6:40
    2/15.
  • 6:40 - 6:45
    Như vậy, 2/15 lần faceSize.
  • 6:45 - 6:48
    Được rồi, hãy thử lại xem.
  • 6:48 - 6:49
    Ồ, nhìn kìa!
  • 6:49 - 6:51
    Hãy nhìn xem. Đẹp quá!
  • 6:51 - 6:52
    Tuyệt rồi!
  • 6:53 - 6:55
    OK, hãy cùng xem lại nhé.
  • 6:55 - 6:56
    Ta đã tạo ra biến này
  • 6:56 - 6:58
    để lưu kích thước của khuôn mặt
  • 6:58 - 7:00
    và nó lưu giữ một giá trị
  • 7:00 - 7:02
    rồi ta có các biến mouthSize
  • 7:02 - 7:03
    và eyeSize
  • 7:03 - 7:06
    và ta tính toán chúng dựa trên tỷ lệ
  • 7:06 - 7:07
    với faceSize
  • 7:07 - 7:08
    để chắc chắn rằng
  • 7:08 - 7:10
    giá trị của chúng luôn thay đổi
  • 7:10 - 7:12
    theo giá trị khởi điểm (faceSize)
  • 7:13 - 7:15
    vì tất cả các giá trị còn lại được tính toán
  • 7:15 - 7:17
    cũng dựa trên faceSize
  • 7:17 - 7:18
    để đảm bảo rằng vị trí
  • 7:18 - 7:20
    các bộ phận trên khuôn mặt thay đổi
  • 7:20 - 7:22
    khi faceSize thay đổi
  • 7:22 - 7:23
    Whoo! Ổn rồi.
  • 7:23 - 7:25
    Như vậy, giờ ta đã thực sự hiểu
  • 7:25 - 7:26
    cách làm cho các biến
  • 7:26 - 7:28
    phụ thuộc vào giá trị của biến khác.
  • 7:28 - 7:30
    Ta còn có thể làm nhiều hơn nữa với những chương trình mình.
  • 7:30 - 7:32
    Hãy ăn mừng bằng cách làm Winston
  • 7:32 - 0:00
    trở nên khổng lồ! Yeah, đi nào Winston!
Title:
Resizing shapes with variable expressions
Description:

more » « less
Video Language:
English
Duration:
07:37

Vietnamese subtitles

Incomplete

Revisions