C#三点定位,已知道ABC与D的距离求D的坐标

已知道三个坐标ABC与A到D,B到D,C到D的距离。求D的坐标

参考GPT和自己的思路,假设已知点 A、B、C 和它们与未知点 D 的距离,我们可以利用数学公式计算出点 D 的坐标。具体做法如下:

定义四个点的坐标和各个点之间的距离:

double[] A = { x1, y1 };
double[] B = { x2, y2 };
double[] C = { x3, y3 };
double distanceAD = d1;
double distanceBD = d2;
double distanceCD = d3;

2 根据 A、B、C 三点坐标之间的距离,计算出它们之间的两个角的余弦值:

double cosA = (Math.Pow(distanceBD, 2) + Math.Pow(distanceCD, 2) - Math.Pow(distanceAD, 2)) / (2 * distanceBD * distanceCD);
double cosB = (Math.Pow(distanceAD, 2) + Math.Pow(distanceCD, 2) - Math.Pow(distanceBD, 2)) / (2 * distanceAD * distanceCD);

3 根据余弦值计算出两个角的弧度:

double angleA = Math.Acos(cosA);
double angleB = Math.Acos(cosB);

4 根据三角函数公式,计算出未知点 D 的坐标:

double[] D = { A[0] + distanceAD * Math.Cos(angleA), A[1] + distanceAD * Math.Sin(angleA) };

完整的 C# 代码如下:

using System;

class ThreePointLocalization
{
    static void Main()
    {
        double[] A = { 1, 2 }; // Point A's coordinates
        double[] B = { 5, 6 }; // Point B's coordinates
        double[] C = { 3, 9 }; // Point C's coordinates
        double distanceAD = 4; // Distance between point A and D
        double distanceBD = 5; // Distance between point B and D
        double distanceCD = 4; // Distance between point C and D

        double cosA = (Math.Pow(distanceBD, 2) + Math.Pow(distanceCD, 2) - Math.Pow(distanceAD, 2)) / (2 * distanceBD * distanceCD);
        double cosB = (Math.Pow(distanceAD, 2) + Math.Pow(distanceCD, 2) - Math.Pow(distanceBD, 2)) / (2 * distanceAD * distanceCD);

        double angleA = Math.Acos(cosA);
        double angleB = Math.Acos(cosB);

        double[] D = { A[0] + distanceAD * Math.Cos(angleA), A[1] + distanceAD * Math.Sin(angleA) };

        Console.WriteLine("The coordinates of point D are ({0}, {1}).", D[0], D[1]);
    }
}

该回答引用ChatGPT
代码如下

using System;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        try
        {
            // 从控制台输入坐标和距离信息
            double Ax = GetInput("A", "x");
            double Ay = GetInput("A", "y");
            double Bx = GetInput("B", "x");
            double By = GetInput("B", "y");
            double Cx = GetInput("C", "x");
            double Cy = GetInput("C", "y");
            double AD = GetInput("A到D的距离");
            double BD = GetInput("B到D的距离");
            double CD = GetInput("C到D的距离");

            // 计算点 D 的坐标
            double Dx = (AD * AD - BD * BD + Bx * Bx - Ax * Ax + By * By - Ay * Ay) / (2 * (Bx - Ax));
            double Dy = (AD * AD - CD * CD + Cx * Cx - Ax * Ax + Cy * Cy - Ay * Ay) / (2 * (Cy - Ay));

            // 输出点 D 的坐标到控制台
            Console.WriteLine($"D = ({Dx}, {Dy})");

            // 将坐标信息保存到文件中
            string filePath = "path/to/file.txt";
            string content = $"D = ({Dx}, {Dy})";
            File.WriteAllText(filePath, content);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }

    static double GetInput(string name, string type = "")
    {
        Console.Write($"请输入{name}点的{type}坐标:");
        string input = Console.ReadLine();
        if (!double.TryParse(input, out double value))
        {
            throw new Exception($"无效的{name}点{type}坐标:{input}");
        }
        return value;
    }

    static double GetInput(string name)
    {
        Console.Write($"请输入{name}:");
        string input = Console.ReadLine();
        if (!double.TryParse(input, out double value))
        {
            throw new Exception($"无效的{name}:{input}");
        }
        return value;
    }
}


先给你个类似的python的,三点坐标及距离求第四点坐标,这怎么看也是个空间几何体,二维的答案是来搞笑的吗