Codync
무료 오픈소스 1:1 대안, Grok Bot과 Muse 대신
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Route geometry and pace physics for cycling, hiking and running in Swift: power-based bike speed, DIN/SAC hiking times, Minetti running pace, noise-filtered ascent and live-ride filters. Held to the JavaScript port's numbers.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Route geometry and pace physics for cycling, hiking and running, in Swift. It powers the route planning, arrival times and live ride tracking in Hatchure on iPhone and Apple Watch.
Try the models in the browser → (the JavaScript port, which gives the same numbers).
Pure value types and static functions: no UI, no networking, no global state. It needs only Foundation and CoreLocation.
Speed for two riders on the same road, gradient by gradient. Below −2% the model has the rider stop pedalling and freewheel, which is the step in both curves, and descents are capped at 65 km/h.
Minutes per kilometre on foot: hiking by the DIN 33466 signpost rule, trail running by Minetti's cost of running on a slope, never faster downhill than 85% of the flat pace.
| Product | What it holds |
|---|---|
TrailPhysicsGeo | RouteGeometry, BoundingBox, RouteLineDecimation, Sun |
TrailPhysics | RiderPhysics, FootPace, RouteElevation, RouteProfile, RideSpeedWindow, RideOffRoute, RideAscent, RideOdometer, RideProfileMath, RideBearing, and turn-by-turn cues: RouteCue, CuePlan (which turns to say, merged, with the way ahead and heads-ups), CueTracker (when to say each). Re-exports TrailPhysicsGeo. |
Platforms: iOS 18, watchOS 11, macOS 14.
.package(url: "https://github.com/ehilzinger/trailphysics-swift", from: "0.1.0")
then .product(name: "TrailPhysics", package: "trailphysics-swift") (or
TrailPhysicsGeo alone) in your target's dependencies.
import CoreLocation
import TrailPhysics
let line: [CLLocationCoordinate2D] = [
.init(latitude: 46.00, longitude: 7.00),
.init(latitude: 46.01, longitude: 7.01),
.init(latitude: 46.02, longitude: 7.02),
]
let elevations: [Double] = [1_200, 1_350, 1_500]
// How fast a 75 kg rider on an 18 kg bike at 180 W covers it.
let rider = RiderPhysics.Rider(riderKg: 75, bikeKg: 18, watts: 180)
let kmh = RiderPhysics.detailedSpeedKmh(rider: rider, latlngs: line, elevations: elevations)
// How long it takes to hike.
let seconds = FootPace.routeSeconds(latlngs: line, elevations: elevations, profile: .hiking)
// Metres climbed, filtered for noise.
let climbed = RouteElevation.ascent(elevations)
// Where a GPS fix sits along the line.
let cumulative = RouteGeometry.cumulativeDistances(line)
let fix = CLLocationCoordinate2D(latitude: 46.012, longitude: 7.011)
let position = RouteGeometry.project(fix, along: line, cumulative: cumulative)
// When the sun sets at the start today.
let sunset = Sun.sunset(on: .now, lat: line[0].latitude, lng: line[0].longitude)
RouteProfile names seven ways a route can be drawn (bike, gravel,
road, roadfast, hiking, trailrun, roadrun) in three sports. The pace
and ride models switch on it. Its raw values are a stored format, so they
never change. Display names and routing-engine ids are left to the host app.
swift test
There is a JavaScript port of the same models,
trailphysics on npm. The
test vectors in Tests/TrailPhysicsTests/Fixtures/ (foot pace, rider
physics, elevation, cues) are byte-identical copies of the files that port
writes, and both test suites read every vector, so the two agree to within
a millionth on every figure they share, and exactly on every cue.
Copyright 2026 Enzo Hilzinger.
Licensed under the Apache License, Version 2.0. See LICENSE.