You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于C#实现直线方程求解及指定X值的Y值计算

Alright, let's break down how to solve this problem in C#. The core idea is to first derive the linear equation from two given points, then use that equation to compute the Y value for any specified X. Even if the line's angle changes randomly, this approach works as long as you have two valid points on the line.

First, let's recap the math behind linear equations

Any straight line (that's not vertical) can be represented in the slope-intercept form:

y = mx + b

Where:

  • m is the slope of the line, calculated as (y2 - y1)/(x2 - x1) using two points (x1,y1) and (x2,y2)
  • b is the y-intercept (the point where the line crosses the Y-axis), calculated as b = y1 - m*x1

For vertical lines (where x1 == x2), the slope is undefined, so we need to handle that edge case separately.


Here's the C# code to implement this logic

We'll create a reusable method that takes two points and a target X value, then returns the corresponding Y value. We use C#'s ValueTuples for clean, readable point storage:

using System;

public class LineCalculator
{
    // Calculate Y for a given X using two points on the line
    public static double GetYFromX((double X, double Y) pointA, (double X, double Y) pointB, double targetX)
    {
        // Handle vertical lines (X coordinates are identical)
        if (Math.Abs(pointA.X - pointB.X) < double.Epsilon)
        {
            throw new ArgumentException("This is a vertical line. Cannot compute Y for a different X value.");
        }

        // Calculate slope (m)
        double slope = (pointB.Y - pointA.Y) / (pointB.X - pointA.X);
        // Calculate y-intercept (b)
        double yIntercept = pointA.Y - slope * pointA.X;

        // Compute Y using y = mx + b
        return slope * targetX + yIntercept;
    }

    public static void Main()
    {
        // Example points: P1(1,10) and P2(10,50), target X=20
        var p1 = (X: 1.0, Y: 10.0);
        var p2 = (X: 10.0, Y: 50.0);
        double targetX = 20.0;

        try
        {
            double resultY = GetYFromX(p1, p2, targetX);
            Console.WriteLine($"When X = {targetX}, the corresponding Y value is: {resultY:F2}");
        }
        catch (ArgumentException ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
    }
}

Let's walk through the code

  • ValueTuples: We use (double X, double Y) to represent points because it's concise and self-documenting—no need for a separate Point struct unless you need extra functionality.
  • Vertical Line Check: We use Math.Abs(pointA.X - pointB.X) < double.Epsilon instead of direct equality to avoid floating-point precision errors. If the line is vertical, we throw an exception since Y can be any value for that fixed X.
  • Slope Calculation: Straightforward application of the slope formula using the two input points.
  • Y-Intercept: Once we have the slope, we solve for b using one of the points (either point works; we use pointA here for consistency).
  • Final Calculation: Plug the target X into the slope-intercept equation to get the corresponding Y value.

Testing the example

For your given points P1(1,10) and P2(10,50):

  • Slope m = (50-10)/(10-1) = 40/9 ≈ 4.44
  • Y-intercept b = 10 - (40/9)*1 = 50/9 ≈ 5.56
  • For X=20: Y = (40/9)*20 + 50/9 = 850/9 ≈ 94.44

Running the code will output exactly this result: When X = 20, the corresponding Y value is: 94.44

This method works for any non-vertical line, regardless of its angle—just pass in two valid points on the line and your target X value.

内容的提问来源于stack exchange,提问作者Shinkov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 08:42:46