Hôm nay có việc cần tính diện tích tam giác biết 3 điểm, nhưng bổng dưng bị bí không biết làm thế nào để có được trường hợp tổng quát nhất, nhờ mọi người giúp vậy.
Hôm nay có việc cần tính diện tích tam giác biết 3 điểm, nhưng bổng dưng bị bí không biết làm thế nào để có được trường hợp tổng quát nhất, nhờ mọi người giúp vậy.
Function TriArea(ByVal x1 As Double, ByVal x2 As Double, ByVal x3 As Double, _
ByVal y1 As Double, ByVal y2 As Double, ByVal y3 As Double) As Double
Dim dA As Double, dB As Double, dC As Double, dP As Double
dA = Sqr((x2 - x1) ^ 2 + (y2 - y1) ^ 2)
dB = Sqr((x3 - x2) ^ 2 + (y3 - y2) ^ 2)
dC = Sqr((x1 - x3) ^ 2 + (y1 - y3) ^ 2)
dP = (dA + dB + dC) / 2
TriArea = Sqr(dP * (dP - dA) * (dP - dB) * (dP - dC))
End Function
Muốn tính bằng công thức cũng được (cứ theo cách tính trong hàm mà làm)
Hôm nay có việc cần tính diện tích tam giác biết 3 điểm, nhưng bổng dưng bị bí không biết làm thế nào để có được trường hợp tổng quát nhất, nhờ mọi người giúp vậy.
Anh có bộ hàm nào liên quan tới những chuyện tương tự như:
- Tính tọa độ giao điểm giữa đường cao xuống cạnh
- Xác định 3 điểm thằng hàng
- Tính diện tích tứ giác biết bốn điểm (kể cả trường hợp tứ giác lõm)
...
Nếu có, anh gởi giúp em sẽ tập hợp lại một phen.
Anh có bộ hàm nào liên quan tới những chuyện tương tự như:
- Tính tọa độ giao điểm giữa đường cao xuống cạnh
- Xác định 3 điểm thằng hàng
- Tính diện tích tứ giác biết bốn điểm (kể cả trường hợp tứ giác lõm)
...
Nếu có em anh gởi giúp em sẽ tập hợp lại một phen.
Ái chà, mấy cái này lại phải "ôn" lại giải tích thôi (ai mà nhớ)
1> Câu 1: Đại khái hoàn toàn có thể xác định được phương trình đường thẳng đi qua 1 điểm cho trước và vuông góc với đường thẳng cho trước ---> Suy ra có thể xác định giao điểm của 2 đường thẳng
2> Câu 2: Không hiểu
3> Câu 3: Diện tích tứ giác = 2 diện tích tam giác cộng lại. Có điều nếu tính tổng quát thì hơi khó khi gặp phải tứ giác lõm (ai biết phải chia ra thành 2 tam giác theo kiểu nào)
-------------------
Nói chung là: Để nghiên cứu lại xem mới có thể viết ra được hàm tổng quát (câu 1 khả thi nhất)
2 vế không tương đương. Ta lấy ví dụ:
A = (1;2), B = (1;3), C = (2;4)
Rõ ràng 3 điểm trên không thẳng hàng.
1. VT.
Không tồn tại k thỏa cả 2 pt (nếu k thỏa pt 1 thì k = 0 nên từ pt 2 => y(B) = y(A) - mâu thuẫn với dữ kiên cho trước) => 3 điểm trên không thẳng hàng
2. VP.
Rõ ràng x(A), x(B), x(C), y(A), y(B), y(C) không thỏa 2 pt đầu. Không thỏa pt 3 vì ta có chia cho 0.
Tóm lại với 3 điểm không thẳng hàng cho trước thì VT không có lỗi trong khi VP có lỗi chia cho 0 nên không thể tương đương.
Công thức nếu nhập vào sheet thì đúng là trả về #DIV/0!
------------
Thường thì để xét 3 điểm có thẳng hàng hay không thì dễ nhất là dùng định thức.
Ta xét ma trận vuông X:
xA yA 1
xB yB 1
xC yC 1
1. det(A, B, C) = det(X) > 0 => điểm C nằm bên trái vécto AB
2. det(A, B, C) = det(X) = 0 => A, B, C thẳng hàng
3. det(A, B, C) = det(X) < 0 => điểm C nằm bên phải véctơ AB
Công thức tính det(X) thì dễ rồi.
-----------
Từ trên ta có điều kiện xét xem tứ giác là lồi hay không:
TuGiacLoi = (det(A, B, C)*det(A, B, D) > 0) AND _
(det(C, D, A)*det(C, D, B) > 0) AND (det(A, B, C)*det(C, D, A) > 0)