Thuật toán tìm trọng tâm của tứ giác

Một vật thể bất kỳ đều có trọng tâm.
Mình không tưởng tượng được 4D, nhưng 0D, 1D, 2D, 3D vật thể luôn có.

1 Like

Vậy thì ngay chỗ đa giác lõm vào thì làm ntn bạn?

chỗ đa giác lõm thì diện tích 1 tam giác sẽ là âm, bù trừ được, vẫn đúng, chừng nào các cạnh cắt nhau thì mới có vấn đề @_@

ví dụ vẽ cái hình này. ABCDEF là lục giác, thứ tự các đỉnh thuận chiều kim đồng hồ
chia ra làm 4 tam giác: ABC, ACD, ADE, AEF
tam giác ABC thuận chiều kim đồng hồ nên diện tích cùng dấu với ABCDEF
tam giác ACD thuận chiều kim đồng hồ nên diện tích cùng dấu với ABCDEF
tam giác ADE ngược chiều kim đồng hồ nên diện tích khác dấu với ABCDEF
tam giác AEF thuận chiều kim đồng hồ nên diện tích cùng dấu với ABCDEF

tổng diện tích 4 tam giác này vẫn bằng với diện tích ABCDEF @@ Vì: tam giác ADE được chia làm 2 mảnh: mảnh ngoài và mảnh trong. Mảnh ngoài và trong được cộng 1 lần vì ACD cùng dấu, trừ 1 lần vì ADE ngược dấu, và mảnh trong được cộng 1 lần nữa nhờ AEF cùng dấu. Vậy mảnh trong được cộng 1 - 1 + 1 = 1 lần, mảnh ngoài được cộng 1 - 1 = 0 lần. Vẫn đúng @@

1 Like

Anh HK boy giải thích luôn làm sao cái VP khác 0 với à?

(G1, G, G4), (G2, G, G3) là 2 bộ 3 thẳng hàng.

->

->

Mà góc giữa GG1 và GG2 không phải lúc nào cũng bằng 0 -> tổng trên không bằng 0 trong mọi trường hợp.


Nói chung là cách coi trọng tâm là điểm để tổng 4 vector = 0 là sai. Về mặt vật lý là sai.

1 Like

Thực ra mình đang trả lời ý này

và tích phân chỉ là để tìm ra công thức thôi.


Khi xem lại ct trên Wiki, ta thấy rằng có thể tính được hoành độ và tung độ cùng lúc với 4n phép nhân số thực. Trong khi mỗi lần tính diện tích tam giác đã là 3 phép nhân số thực rồi.

A post was merged into an existing topic: Topic chứa các reply được cho là off-topic - version 2

1 Like

Về tính trọng tâm Đa giác n đỉnh đồng nhất, em nghĩ thế này:

Gọi G0 là trọng tâm A0A1A2…An-1G1 là trọng tâm A1A2…An-1.
Có: Tổng_i(G0Ai) = 0, i=0,n-1Tổng_j(G1Aj)=0, j=1,n-1.

Tổng_i(G0Ai) = G0A0 + Tổng_j(G0Aj)
G0Aj = G0G1 + G1Aj
Suy ra: Tổng_i(G0Ai) = G0A0 + (n-1)G0G1 + Tổng_j(G1Aj)
Do đó: G0A0 = - (n-1)G0G1 (X)

Tức là: A0, G0, G1 thẳng hàng.
Bài toán đưa về:

  1. Tìm trọng tâm đa giác n-1 điểm.
  2. Tìm điểm nằm thỏa mãn (X)

Công thức GA + GB + … = 0 là SAI :slight_smile: bạn thử nghĩ xem, trọng tâm của tứ giác thì chỗ nào trên hình cũng có trọng lực, chứ đâu phải chỉ bốn đỉnh. Tam giác thì vô tình nó đúng thôi. (có khi nào kiềng ba chân là ct vững nhất là do sự trùng hợp này? :D)

2 Likes

nếu đa giác lõm bạn hoàn toàn có thể đưa về đa giác lồi, trước khi tính trọng tâm cần kiểm tra lồi lõm, nếu lõm ta sẽ xác định đc nó nằm ở đâu, ta sẽ tìm trọng tâm cho đa giác lồi này nhưng bị mất 1 phần tam giác (dẫn đến chỗ lõm) có 1 chút thay đổi trong công thức tính, chỗ bị mất (thiếu) sẽ là dấu - .
PS: công thức tính này hoàn toàn dựa vào công thức tích phân, 2 cái đó là 1, tuy nhiên nó là trường hợp đặc biệt của công thức kia, thay vì chia nhỏ vi phân ta chia đa giác thành các hình có trọng tâm dễ xác định, như hình chữ nhật, tam giác và cả hình tròn. Trong lập trình khó có thể chia được như vậy, nên mình chọn tam giác là đơn giản nhất để chia.
PS: mình có thể thêm vào 1 hình nào đó đơn giản để biến hình phức tạp (đa giác lõm) thành hình đơn giản ( đa giác lồi) tuy nhiên khi thêm thì trong công thức nó sẽ là dấu trừ thay vì dấu + bình thường.

Mình e là làm như bạn chỉ phù hợp với hình bạn thấy chứ không phù hợp với máy tính :slight_smile: trên máy thì for phát lấy công thức ra là xong rồi. Đây là bài code.

1 Like

đúng rồi, nhưng mình có đề xuất xác định trọng tâm của các tam giác tạo nên bởi các đỉnh của đa giác, trường hợp lồi thì đơn giản, còn trường hợp lõm thì mình có nói ở trên rồi, việc kiểm tra lồi lõm bằng code cũng đâu có khó? sử dụng kiến thức hình học phẳng lớp 10 là đủ.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?