Cách tính Shape.Left, Shape.Top khi xoay shape

Liên hệ QC

Nhattanktnn

Thành viên gắn bó
Tham gia
11/11/16
Bài viết
3,152
Được thích
4,119
Donate (Momo)
Donate
Giới tính
Nam
Em đang viết một số thứ liên quan tới shape, nhưng gặp vấn đề này chưa biết Excel đang tính thế nào:
Khi shape ở 0 độ hoặc 180 độ thì không sao, nhưng khi shape xoay 90 hoặc 270 độ, thì giá trị Shape.Left, Shape.Top không hiểu tính sao ra kết quả như hình bên dưới, anh chị nào giải thích giúp với!

1643439672371.png
 
Thế trước khi xoay nó là bao nhiêu?

--------
Edited:
Theo tôi nhớ thì dù xoay bao nhiêu độ thì top, left, width và height không đổi. Muốn tính top mới và left mới thì phải tính toán với quy ước là tâm xoay không thay đổi vị trí
 
Lần chỉnh sửa cuối:
Upvote 0
Tính thử và vẽ thử
1643465858067.png
After rotate

1643466006398.png
 
Lần chỉnh sửa cuối:
Upvote 0
Tết nhất bận rộn quá giờ em mới vào em được, và cũng xem bằng điện thoại chứ chưa mở máy tính ra. Em cũng nghĩ nó liên quan tới góc quay thế nào đó nhưng chưa tìm được công thức tính. Nếu như top left không đổi khi xoay như bài #1 Thầy nói thì bài #2 lại có chút mâu thuẫn. Lúc nào rảnh em sẽ xem lại kỹ những gì Thầy nói. Cảm ơn Thầy đã giúp đỡ
 
Upvote 0
bài #2 lại có chút mâu thuẫn.
Không có gì mâu thuẫn:
- Cột before là thông số top left thực, dựa vào width và height tính ra tọa độ X, Y của tâm.
Center X = Left1 + width1 / 2
Center Y = Top1 + height1 / 2
- Cột after lấy X, Y không đổi, width, height bị xoay và hoán đổi giá trị, tính ngược lên top mới, left mới.
Left2 = Center X - width2 / 2
Top2 = Center Y - height2 / 2

Với width2 = height1 và height2 = width1

Lưu ý nếu kiểm tra top và left của rectangle 1 thì vẫn như cũ không đổi, tôi vẽ thêm rectangle 2 sao cho trùng khít với rectangle 1 sau khi xoay 90 độ, dùng rectangle 2 để kiểm tra top mới, left mới, khớp với tính toán.

Nếu xem kỹ hình bài 3 thì thấy VBA dòng lệnh 1 là của Rectg1, dòng lệnh 2 là của Rectg2. Nếu chạy lại dòng lệnh 1 của Rectg1 thì vẫn y như cũ.
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom