File indexing completed on 2024-05-12 03:47:51

0001 /*
0002     File                 : nsl_geom.c
0003     Project              : LabPlot
0004     Description          : NSL geometry functions
0005     --------------------------------------------------------------------
0006     SPDX-FileCopyrightText: 2016 Stefan Gerlach <stefan.gerlach@uni.kn>
0007     SPDX-License-Identifier: GPL-2.0-or-later
0008 */
0009 
0010 #include "nsl_geom.h"
0011 #include <gsl/gsl_math.h>
0012 
0013 double nsl_geom_point_point_dist(double x1, double y1, double x2, double y2) {
0014     return gsl_hypot(x2 - x1, y2 - y1);
0015 }
0016 
0017 double nsl_geom_point_line_dist(double x1, double y1, double x2, double y2, double xp, double yp) {
0018     return fabs((xp - x1) * (y2 - y1) - (x2 - x1) * (yp - y1)) / nsl_geom_point_point_dist(x1, y1, x2, y2);
0019 }
0020 
0021 double nsl_geom_point_line_dist_y(double x1, double y1, double x2, double y2, double xp, double yp) {
0022     return fabs(yp - y1 - (y2 - y1) * (xp - x1) / (x2 - x1));
0023 }
0024 
0025 double nsl_geom_three_point_area(double x1, double y1, double x2, double y2, double x3, double y3) {
0026     return fabs(x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2)) / 2.;
0027 }
0028 
0029 double nsl_geom_point_point_dist3(double x1, double y1, double z1, double x2, double y2, double z2) {
0030     return gsl_hypot3(x2 - x1, y2 - y1, z2 - z1);
0031 }