fork download
  1. local p1lat, p1lon = 48.164465, 16.405965
  2. local p2lat, p2lon = 48.163078, 16.405359
  3. local p3lat, p3lon = 48.163092, 16.406662
  4. local minDist, R = 25, 6371000
  5. math.randomseed(os.time())
  6. local generated = {}
  7. for _ = 1, 10 do
  8. while true do
  9. local r1, r2 = math.random(), math.random()
  10. if r1 + r2 > 1 then r1, r2 = 1 - r1, 1 - r2 end
  11. local lat = p1lat + r1 * (p2lat - p1lat) + r2 * (p3lat - p1lat)
  12. local lon = p1lon + r1 * (p2lon - p1lon) + r2 * (p3lon - p1lon)
  13. local latRad, cosLat = math.rad(lat), math.cos(math.rad(lat))
  14. local valid = true
  15. for _, c in ipairs(generated) do
  16. local dLat, dLon = math.rad(c.lat - lat), math.rad(c.lon - lon)
  17. local a = math.sin(dLat / 2)^2 + cosLat * math.cos(math.rad(c.lat)) * math.sin(dLon / 2)^2
  18. if R * 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a)) < minDist then valid = false; break end
  19. end
  20. if valid then
  21. generated[#generated + 1] = { lat = lat, lon = lon }
  22. print(lat, lon)
  23. break
  24. end
  25. end
  26. end
  27.  
Success #stdin #stdout 0.01s 5288KB
stdin
Standard input is empty
stdout
48.163764501265	16.406224285055
48.163430497375	16.406075703369
48.164347640595	16.40591651969
48.16353313688	16.405675730792
48.163131760332	16.406113264017
48.163166987414	16.405595328587
48.164052558951	16.405968110932
48.163136497285	16.406501028063
48.163825222059	16.405768778894
48.16338779113	16.406419871283