C++计算一条直线上某点的坐标


假设起点(X1, Y1) 终点(X2, Y2),  间距(从起点开始一段距离)为R


两点之间的距离 S = sqrt(pow(X2-X1, 2) + pow(Y2-Y1, 2))


方法一:


方位角: F = atan((Y2-Y1)/(X2-X1))


方位角概念: 

方位角又称地平经度(Azimuth (angle)缩写Az)是在平面上量度物体之间的角度差的方法之一。

是从某点的指北方向线起依顺时针方向到目标方向线之间的水平夹角


X = X1 + R * cos(F);
Y = Y1 + R * sin(F);


方法二:


利用三角形相似原理


R / S = X1 / X        X = X1 * S / R
R / S = Y1 / Y        Y = Y1 * S / R
C++ 中,我们可以用两个点的坐标来确定一条直线。设两个点的坐标分别为 $(x_1, y_1)$ 和 $(x_2, y_2)$,则可以计算直线的斜率 $k$ 和截距 $b$,然后用一般式 $ax + by + c = 0$ 来表示直线。 具体实现方法如下: 1. 计算斜率 $k$: $$k = \frac{y_2 - y_1}{x_2 - x_1}$$ 2. 计算截距 $b$: $$b = y_1 - kx_1$$ 3. 将斜率 $k$ 和截距 $b$ 代入一般式 $ax + by + c = 0$ 中,得到: $$ax + (-1)y + b = 0$$ 其中 $a = k, b = -1, c = b$。 4. 如果需要求直线某点坐标,可以将该点的横坐标代入一般式中,解出对应的纵坐标即可。 示例代码如下: ```c++ #include <iostream> using namespace std; // 计算斜率和截距 void calcLine(double x1, double y1, double x2, double y2, double& k, double& b) { k = (y2 - y1) / (x2 - x1); b = y1 - k * x1; } // 根据两点坐标计算直线一般式 void calcGeneral(double x1, double y1, double x2, double y2, double& a, double& b, double& c) { double k, bb; calcLine(x1, y1, x2, y2, k, bb); a = k; b = -1; c = bb; } // 求直线某点坐标 void calcPoint(double x1, double y1, double x2, double y2, double x, double& y) { double k, b; calcLine(x1, y1, x2, y2, k, b); y = k * x + b; } int main() { double x1 = 1, y1 = 1, x2 = 3, y2 = 5; double k, b; calcLine(x1, y1, x2, y2, k, b); cout << "斜率:" << k << endl; cout << "截距:" << b << endl; double a, bb, c; calcGeneral(x1, y1, x2, y2, a, bb, c); cout << "一般式:" << a << "x + " << bb << "y + " << c << " = 0" << endl; double x = 2, y; calcPoint(x1, y1, x2, y2, x, y); cout << "直线上 (" << x << ", " << y << ")" << endl; return 0; } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值