Tìm khoảng cách nhỏ nhất giữa 1 điểm tới tập hợp điểm cho trước

  • Thread starter Thread starter LongSoc
  • Ngày gửi Ngày gửi
Liên hệ QC

LongSoc

Thành viên mới
Tham gia
3/1/20
Bài viết
3
Được thích
0
Xin chào mọi người trong diễn đàn, em có vấn đề này muốn được giúp đỡ.

Em có 1 điểm A tọa độ (Xo, Yo), và 1 tập hợp khoảng 1000 điểm có tọa độ (X1, Y1), (X2,Y2)....(Xn,Yn)
Giờ em muốn tìm khoảng cách nhỏ nhất từ điểm A tới tập hợp 1000 điểm kia bằng việc có 1 VBA nào đó giải quyết việc này theo cú pháp

Funcition (Xo:Yo, array X1:Yn)
Trân trọng cảm ơn các bác.
 
Lần chỉnh sửa cuối:
Xin chào mọi người trong diễn đàn, em có vấn đề này muốn được giúp đỡ.

Em có 1 điểm A tọa độ (Xo, Yo), và 1 tập hợp khoảng 1000 điểm có tọa độ (X1, Y1), (X2,Y2)....(Xn,Yn)
Giờ em muốn tìm khoảng cách nhỏ nhất từ điểm A tới tập hợp 1000 điểm kia bằng việc có 1 VBA nào đó giải quyết việc này theo cú pháp

Funcition (Xo:Yo, array X1:Yn)
Trân trọng cảm ơn các bác.
Cho cái ví dụ
 
Upvote 0
Thôi thì cứ làm theo cách "cần cù". Tính 1000 kết quả theo Pythagoras thì biết khoảng cách nào ngắn nhất. 1000 phép tính không phải là thao tác khủng.
Không cần khai căn khi tính 1000 kết quả vì khoảng cách nhỏ nhất thì bình phương của nó cũng nhỏ nhất. Chỉ khai căn bậc 2 cho khoảng cách nhỏ nhất tìm được.
 
Lần chỉnh sửa cuối:
Upvote 0
Thớt không có căn bản về array cho nen nói chuyện lủng củng.
Đại khái nó vầy:
Function KhoangCachGanNhat(diem() As Double, diemArray() As Double) As Double
Dim iX as Long, iY as Long, sY as Long, eY as Long, minDist As Double, nuDist As Double
sY = LBound(diemArray, 2)
eY = UBound(diemArray, 2)
KhoangCachGanNhat = KhoangCach(diem, VBA.Array(diemArray(LBound(diemArray)), diemArray(LBound(diemArray, 2))
For iX = LBound(diemArray) + 1 To UBound(diemArray)
nuDist = KhoangCach(diem, VBA.Array(diemArray(iX), diemArray(iY)))
If KhoangCachGanNhat > nuDist Then KhoangCachGanNhat = nuDist
Next iX
End Function
Ví dụ trên không có xét khoảng cách 0, tức là điểm nằm trong tập hợp điểm thì có cần tự loại chính nó ra hay không?
Viết hàm KhoangCach dễ rồi.

Chú: tôi nghĩ đây là một bài tập. Bài tập này khá phổ biến trong Lập trình hướng đối tượng. Viết một cái class cho diem.
Điều tôi thắc mắc là taoij sao tìm khoảng ngắn nhất. Kết qủa làm cái gì? Tìm điểm gần nhất mới có lý chứ.
 
Upvote 0
Thớt không có căn bản về array cho nen nói chuyện lủng củng.
Đại khái nó vầy:
Function KhoangCachGanNhat(diem() As Double, diemArray() As Double) As Double
Dim iX as Long, iY as Long, sY as Long, eY as Long, minDist As Double, nuDist As Double
sY = LBound(diemArray, 2)
eY = UBound(diemArray, 2)
KhoangCachGanNhat = KhoangCach(diem, VBA.Array(diemArray(LBound(diemArray)), diemArray(LBound(diemArray, 2))
For iX = LBound(diemArray) + 1 To UBound(diemArray)
nuDist = KhoangCach(diem, VBA.Array(diemArray(iX), diemArray(iY)))
If KhoangCachGanNhat > nuDist Then KhoangCachGanNhat = nuDist
Next iX
End Function
Ví dụ trên không có xét khoảng cách 0, tức là điểm nằm trong tập hợp điểm thì có cần tự loại chính nó ra hay không?
Viết hàm KhoangCach dễ rồi.

Chú: tôi nghĩ đây là một bài tập. Bài tập này khá phổ biến trong Lập trình hướng đối tượng. Viết một cái class cho diem.
Điều tôi thắc mắc là taoij sao tìm khoảng ngắn nhất. Kết qủa làm cái gì? Tìm điểm gần nhất mới có lý chứ.
Vâng bác, em hơi gà khoản này, chỉ biết gắn VBA để chạy chứ không phải dân lập trình. Em gửi file đính kèm như dưới đây các bác xem giúp nhé
Đại loại là theo hệ tọa độ cực tính theo công thức Sqrt((x1-x2)^2+(y1-Y2)^2) ta sẽ ra 1 khoảng cách từ điểm gốc tới tập điểm kia, sau đó dùng hàm Min sẽ xác định được khoảng cách gần nhất từ điểm gốc tới tập hợp điểm đã cho.
Vấn đề này sinh ở đây là khi số lượng điểm gốc tăng lên thì làm sẽ rất thủ công nên em mới có ý tưởng về việc dùng macro, khi đó với mỗi số lượng điểm gốc tăng lên e chỉ cần kéo hàm tham chiếu 2 tọa độ X, Y của điểm gốc mới với tập hợp điểm đã cho. Và em lại cần số liệu là khoảng cách min này.
Các bác xem vấn đề này giúp em với. Thank's các bác nhiều!
 

File đính kèm

Upvote 0
Bài toán tính trọng tâm là dùng Least Square: tìm một điểm mà tổng khoảng cách nó đến một nhóm điểm là nhỏ nhất.
Trong toán thống kê thì có thêm con toán để loại những điểm ngoại lệ (nằm quá xa các điểm còn lại)
 
Upvote 0
Web KT

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

Back
Top Bottom