利用C语言编写程序计算数字测图中的三角高程实验

本文介绍了一个用于计算平均高差的C语言程序。该程序通过读取斜距、角度、仪器高和棱镜高的数据文件,利用三角函数计算出直距,并进一步求得平均高差。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先说缺陷:1.一测回的度分秒值需要先用计算器换算为度值才能进行运算;
2.使用的文件较多;
3.因为老师要求用公式将斜距转换为直线距离,所以计算步骤略多;
4.个别英文单词拼写有误;
5.没有储存单向高差值。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define pi 3.1415926535898
#define DEC (pi / 180)

static int num_slope_distence, num_angle, num_instrument, num_prism;

static float *slope_distence;       //斜距
static float *elevation;            //高程
static float *distence;             //直距
static float *angle;                //角度
static float *elevation_instrument; //仪器高
static float *elevatioon_prism;     //棱镜高
static float *answer;

void Read(void);
void computer(void);

int main()
{
    Read();
    computer();
    printf("\aThe computer is ended!\n");
    return EXIT_SUCCESS;
}

void Read(void)
{
    FILE *fp_slope_distence, *fp_angle, *fp_instrument, *fp_prism;

    fp_slope_distence = fopen("input_distance.txt", "r");
    fp_angle = fopen("input_angle.txt", "r");
    fp_instrument = fopen("elevation_instrument.txt", "r");
    fp_prism = fopen("elevatioon_prism.txt", "r");
    //fp_test = fopen("test.txt", "w");

    fscanf(fp_slope_distence, "%d", &num_slope_distence);
    fscanf(fp_angle, "%d", &num_angle);
    fscanf(fp_instrument, "%d", &num_instrument);
    fscanf(fp_prism, "%d", &num_prism);

    slope_distence = (float *)malloc(sizeof(float) * num_slope_distence);
    angle = (float *)malloc(sizeof(float) * num_angle);
    elevation_instrument = (float *)malloc(sizeof(float) * num_instrument);
    elevatioon_prism = (float *)malloc(sizeof(float) * num_prism);

    for (int i = 0; i < num_slope_distence; i++)
        fscanf(fp_slope_distence, "%f", (slope_distence + i));

    for (int j = 0; j < num_angle; j++)
        fscanf(fp_angle, "%f", (angle + j));

    for (int q = 0; q < num_angle; q++)
        fscanf(fp_instrument, "%f", (elevation_instrument + q));

    for (int p = 0; p < num_angle; p++)
        fscanf(fp_prism, "%f", (elevatioon_prism + p));

    fclose(fp_slope_distence);
    fclose(fp_angle);
    fclose(fp_instrument);
    fclose(fp_prism);
    //fclose(fp_test);
}

void computer(void)
{
    FILE *fp_answer;
    fp_answer = fopen("output.txt", "w");
    distence = (float *)malloc(sizeof(float) * num_slope_distence / 2);

    for (int i = 0; i < num_slope_distence; i++)
        *(distence + i) = *(slope_distence + i) / cos(*(angle + i) * DEC);
    /*for (int i = 0; i < num_slope_distence; i++)
        printf("%f", *(distence + i));*/

    answer = (float *)malloc(sizeof(float) * num_slope_distence);

    for (int i = 0; i < num_slope_distence; i += 2)
        *(answer + i) = (*(distence + i) * tan(*(angle + i) * DEC) + *(elevation_instrument + i) - *(elevatioon_prism + i) + *(distence + i + 1) * tan(*(angle + i + 1) * DEC) + *(elevation_instrument + i + 1) - *(elevatioon_prism + i + 1)) / 2;

    for (int i = 0; i < num_slope_distence/2; i++)
        fprintf(fp_answer, "%f ", *(answer + i));

    fclose(fp_answer);
}

p.s 每个txt文本数据的第一个值为数据的个数

一测回角度数据
4 0.7428 -1.312 -0.713 -0.463
斜距数据
4 25.789 25.781 14.109 14.123
全站仪高程
4 1.515 1.422 1.517 1.448
棱镜高程
4 1.375 1.345 1.353 1.342
结果:平均高差
-0.019613 -0.001327 

欢迎跟我一样的新手交流,也恳请各位大佬提一些意见,感激不尽。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值