已知线段各点经纬度,判断线段相交函数

判断线段相交,往往都是以平面坐标系为基础来判断,如果坐标系是地球坐标系,知道的是经纬度应该如何判断呢?本文主要关注的就是此问题。

假设:线段各点之间距离不是很大,可认为都在同一平面上。

如果线段长度很长,无法满足假设的情况,则此算法未必适用。

 

提供功能:

* 函数名称: GetXY
* 功能描述: 获得点A相对于点B的平面坐标系

 

* 函数名称: CrossFuntion
* 功能描述: 求两矢量的叉积

 

*类名称:TLine

*功能:判断两线段是否相交

 

 

struct TSectorPoint
{
 double dCellLon;
 double dCellLat;
};

struct TXYPoint
{
 double X;
 double Y;
};

 

//线段类
class TLine
{
public:
 TLine(const TSectorPoint StartPoint,const TSectorPoint EndPoint);
 bool IsLineCross(TLine line);
private:
 TSectorPoint P1;
 TSectorPoint P2;

};

 

/**********************************************************************
* 函数名称: GetXY
* 功

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Matlab中,可以使用一些内置函数和数学公式来计算已知经纬度的一个点对应的另一个点的经纬度。 首先,获取已知点的经度(longitude)和纬度(latitude)值。然后根据需要计算的距离和方向,使用以下公式进行计算: 1. 经度: 新经度 = 已知经度 + (距离 * cos(方向))/ (每经度对应的距离值) 2. 纬度: 新纬度 = 已知纬度 + (距离 * sin(方向))/ (每纬度对应的距离值) 其中,每经度对应的距离值和每纬度对应的距离值可以根据地球半径和经纬度范围进行计算。 以下是一个示例的Matlab代码,用于计算已知经纬度一个点对应的另一个点的经纬度: ```matlab % 已知点的经纬度 known_longitude = 116.3975; % 已知经度 known_latitude = 39.9085; % 已知纬度 % 距离和方向 distance = 100; % 距离(单位:km) direction = 45; % 方向(单位:度) % 每经度对应的距离值和每纬度对应的距离值(这里简化为常量,实际中需要根据经纬度范围进行计算) distance_per_longitude = 111; % 单位:km distance_per_latitude = 111; % 单位:km % 计算新的经纬度 new_longitude = known_longitude + (distance * cosd(direction)) / distance_per_longitude; new_latitude = known_latitude + (distance * sind(direction)) / distance_per_latitude; disp(['新的经度:', num2str(new_longitude)]); disp(['新的纬度:', num2str(new_latitude)]); ``` 这段代码将根据已知经纬度、距离和方向,计算出一个新的点的经纬度,并将结果显示出来。请注意,这里使用的是近似计算,实际中可能需要考虑地球的不规则形状和更为复杂的数学模型。 ### 回答2: 在Matlab中,我们可以使用经度和纬度的数学计算公式来求解已知地球上一点的经纬度,以求得另外一点的经纬度。具体步骤如下: 步骤一:确定已知点的经纬度和距离 假设已知点的经度为A经度,纬度为A纬度,并且我们已知到另外一点的距离D(单位为千米)。 步骤二:进行数学计算 1. 首先,将经度和纬度转换为弧度计算。 A经度_radian = deg2rad(A经度); A纬度_radian = deg2rad(A纬度); 2. 计算地球的半径R(单位为千米)。 R = 6371; 3. 使用以下公式计算已知点的经纬度所对应的单位长度。 lng_distance = D / (R * cos(A纬度_radian)); lat_distance = D / R; 4. 最后,计算另外一点的经纬度。 B经度 = rad2deg(A经度_radian + lng_distance); B纬度 = rad2deg(A纬度_radian + lat_distance); 步骤三:输出结果 输出另外一点的经纬度。 以上就是使用Matlab求解已知地球上一点经纬度求另外一点的方法。希望对您有所帮助! ### 回答3: 在Matlab中,可以使用Haversine公式来计算给定经纬度的两个点之间的距离和方位角。下面是使用Matlab编写的例子代码,可以根据已知经纬度计算得到另一个点的经纬度: ```matlab % 已知点的经纬度 lat1 = 39.90; % 点1的纬度 lon1 = 116.40; % 点1的经度 distance = 100; % 与点1的距离(单位:千米) bearing = 45; % 与点1的方位角(相对于True North) % 将经纬度转换为弧度 lat1 = deg2rad(lat1); lon1 = deg2rad(lon1); % 将距离转换为弧度 distance = distance / 6371; % Earth's radius in km % 将方位角转换为弧度 bearing = deg2rad(bearing); % 计算新点的纬度 lat2 = asin(sin(lat1) * cos(distance) + cos(lat1) * sin(distance) * cos(bearing)); % 计算新点的经度 lon2 = lon1 + atan2(sin(bearing) * sin(distance) * cos(lat1), cos(distance) - sin(lat1) * sin(lat2)); % 将经纬度转换为度数 lat2 = rad2deg(lat2); lon2 = rad2deg(lon2); % 输出结果 disp(['新点的纬度:', num2str(lat2)]); disp(['新点的经度:', num2str(lon2)]); ``` 上述代码通过输入已知点的经纬度、距离和方位角,使用Haversine公式计算出另一个点的经纬度,并将结果显示出来。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值