编写函数实现对单路径总长度的计算

 

问题描述


无人驾驶技术成为当前研究的热点,其中路径规划是研究热点之一,因此路径在计算机中的表达式编程的工作之一。

(1)在地图中,路径点一般由平面位置(x,y)组成,请定义一个名称为 Point 的结构体来表示地图中的一个点。

(2)路径一般可以看作是有多个离散点(Point)组成,请定义一个名称为 Path 的结构体,包含以下三个部分:至少 3 个路径点;路径编号;路径长度

(3)编写如下函数实现对路径长度的计算。

 void compute_length(struct Path * p)

说明:

(1)此函数实现对路径总长度的计算;

(2)函数参数为路径的指针

(3)路径总长度一般采用所有点的距离求和来近似;

(4)计算结果存入本结构体

C语言代码实现


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

// 定义 Point 结构体表示地图中的一个点
struct Point {
    double x;
    double y;
};

// 定义 Path 结构体表示路径
struct Path {
    struct Point points[1000];  // 至少1000个路径点
    int pathNumber;
    double pathLength;
};

// 计算两个点之间的距离
double distance(struct Point a, struct Point b) {
    return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}

// 计算路径总长度
void compute_length(struct Path *p) {
    double length = 0.0;

    for (int i = 0; i < p->pathNumber - 1; ++i) {
        length += distance(p->points[i], p->points[i + 1]);
    }

    p->pathLength = length;
}

int main() {
    // 示例使用
    struct Point point1 = {0.0, 0.0};
    struct Point point2 = {3.0, 4.0};
    struct Point point3 = {6.0, 8.0};

    struct Path path;

    path.points[0] = point1;
    path.points[1] = point2;
    path.points[2] = point3;

    path.pathNumber = 3;

    compute_length(&path);

    printf("Path Length: %f\n", path.pathLength);

    return 0;
}

C++代码实现


#include <iostream>
#include <vector>
#include <cmath>

// 定义 Point 结构表示地图中的一个点
struct Point {
    double x;
    double y;
};

// 定义 Path 结构表示路径
struct Path {
    std::vector<Point> points;  // 至少1000个路径点
    int pathNumber;
    double pathLength;
};

// 计算两个点之间的距离
double distance(Point a, Point b) {
    return std::sqrt(std::pow((a.x - b.x), 2) + std::pow((a.y - b.y), 2));
}

// 计算路径总长度
void compute_length(Path& path) {
    double length = 0.0;

    for (int i = 0; i < path.pathNumber - 1; ++i) {
        length += distance(path.points[i], path.points[i + 1]);
    }

    path.pathLength = length;
}

int main() {
    // 示例使用
    Point point1 = {0.0, 0.0};
    Point point2 = {3.0, 4.0};
    Point point3 = {6.0, 8.0};

    // 创建路径对象
    Path path;
    
    // 添加点到路径
    path.points.push_back(point1);
    path.points.push_back(point2);
    path.points.push_back(point3);

    // 设置路径编号
    path.pathNumber = path.points.size();

    // 计算路径长度
    compute_length(path);

    // 输出路径长度
    std::cout << "Path Length: " << path.pathLength << std::endl;

    return 0;
}

Python代码实现


import math

# 定义 Point 类表示地图中的一个点
class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

# 定义 Path 类表示路径
class Path:
    def __init__(self):
        self.points = []  # 至少1000个路径点
        self.pathNumber = 0
        self.pathLength = 0.0

# 计算两个点之间的距离
def distance(point1, point2):
    return math.sqrt((point1.x - point2.x) ** 2 + (point1.y - point2.y) ** 2)

# 计算路径总长度
def compute_length(path):
    length = 0.0

    # 遍历路径点列表,计算相邻点之间的距离
    for i in range(len(path.points) - 1):
        length += distance(path.points[i], path.points[i + 1])

    path.pathLength = length

# 示例使用
point1 = Point(0.0, 0.0)
point2 = Point(3.0, 4.0)
point3 = Point(6.0, 8.0)

# 创建路径对象
path = Path()

# 添加点到路径
path.points.extend([point1, point2, point3])

# 设置路径编号
path.pathNumber = len(path.points)

# 计算路径长度
compute_length(path)

# 输出路径长度
print("Path Length:", path.pathLength)

 

猜你喜欢

转载自blog.csdn.net/qq_50942093/article/details/134698736