GeographicLib: Rhumb.hpp Source File (original) (raw)

22# define GEOGRAPHICLIB_RHUMBAREA_ORDER \

23 (GEOGRAPHICLIB_PRECISION == 2 ? 6 : \

24 (GEOGRAPHICLIB_PRECISION == 1 ? 4 : 8))

81 private:

86 bool _exact;

87 real _a, _f, _n, _rm, _c2;

88 int _lL;

89 std::vector _pP;

91 void AreaCoeffs();

92 class qIntegrand {

94 public:

96 real operator()(real chi) const;

97 };

98

100

101

102

103

104 void GenDirect(real lat1, real lon1, real azi12,

105 bool, real s12, unsigned outmask,

107 real& S12) const {

108 GenDirect(lat1, lon1, azi12, s12, outmask, lat2, lon2, S12);

109 }

111 unsigned outmask, real& s12, real& azi12,

113 GenInverse(lat1, lon1, lat2, lon2, outmask, s12, azi12, S12);

114 }

115

116 public:

117

118

119

120

121

123

124

125

126

127 NONE = 0U,

128

129

130

131

132 LATITUDE = 1U<<7,

133

134

135

136

137 LONGITUDE = 1U<<8,

138

139

140

141

142 AZIMUTH = 1U<<9,

143

144

145

146

147 DISTANCE = 1U<<10,

148

149

150

151

152 AREA = 1U<<14,

153

154

155

156

157 LONG_UNROLL = 1U<<15,

158

159

160

161

162 ALL = 0x7F80U,

163 };

164

165

166

167

168

169

170

171

172

173

174

175

176

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201 void Direct(real lat1, real lon1, real azi12, real s12,

202 real& lat2, real& lon2, real& S12) const {

203 GenDirect(lat1, lon1, azi12, s12,

204 LATITUDE | LONGITUDE | AREA, lat2, lon2, S12);

205 }

206

207

208

209

210 void Direct(real lat1, real lon1, real azi12, real s12,

211 real& lat2, real& lon2) const {

212 real t;

213 GenDirect(lat1, lon1, azi12, s12, LATITUDE | LONGITUDE, lat2, lon2, t);

214 }

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

244 unsigned outmask, real& lat2, real& lon2, real& S12) const;

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268 void Inverse(real lat1, real lon1, real lat2, real lon2,

269 real& s12, real& azi12, real& S12) const {

270 GenInverse(lat1, lon1, lat2, lon2,

271 DISTANCE | AZIMUTH | AREA, s12, azi12, S12);

272 }

273

274

275

276

277 void Inverse(real lat1, real lon1, real lat2, real lon2,

278 real& s12, real& azi12) const {

279 real t;

280 GenInverse(lat1, lon1, lat2, lon2, DISTANCE | AZIMUTH, s12, azi12, t);

281 }

282

283

284

285

286

287

288

289

290

291

292

293

294

295

296

297

298

299

300

301

302

304 unsigned outmask,

306

307

308

309

311

312

313

314

315

316

317

318

319

320

321

322

323

324

325

326

327 RhumbLine Line(real lat1, real lon1, real azi12) const;

328

329

330

331

332

333

334

335

336

338

339

340

341

342

344

345

346

347

348

349

350

352

353 return 2 * real(Math::td) * _c2;

354 }

355

356

357

358

359

360

361 static const Rhumb& WGS84();

362 };

383 private:

386 const Rhumb& _rh;

387 real _lat1, _lon1, _azi12, _salp, _calp, _mu1, _psi1;

389

391 RhumbLine(const Rhumb& rh, real lat1, real lon1, real azi12);

392

393 public:

394

395

396

397

399

400

401

403

404

405

406

407 NONE = Rhumb::NONE,

408

409

410

411

412 LATITUDE = Rhumb::LATITUDE,

413

414

415

416

417 LONGITUDE = Rhumb::LONGITUDE,

418

419

420

421

422 AZIMUTH = Rhumb::AZIMUTH,

423

424

425

426

427 DISTANCE = Rhumb::DISTANCE,

428

429

430

431

432 AREA = Rhumb::AREA,

433

434

435

436

437 LONG_UNROLL = Rhumb::LONG_UNROLL,

438

439

440

441

442 ALL = Rhumb::ALL,

443 };

444

445

446

447

449

450

451

452

453

454

455

456

457

458

459

460

461

462

463

464

465

466

467 void Position(real s12, real& lat2, real& lon2, real& S12) const {

468 GenPosition(s12, LATITUDE | LONGITUDE | AREA, lat2, lon2, S12);

469 }

470

471

472

473

474

475 void Position(real s12, real& lat2, real& lon2) const {

476 real t;

477 GenPosition(s12, LATITUDE | LONGITUDE, lat2, lon2, t);

478 }

479

480

481

482

483

484

485

486

487

488

489

490

491

492

493

494

495

496

497

498

499

500

501

502

503

504

505

506

507

508 void GenPosition(real s12, unsigned outmask,

510

511

512

513

514

515

516

517

519

520

521

522

524

525

526

527

529

530

531

532

533

535

536

537

538

539

541 };