平面静电场模拟程序设计

本文设计并实现了一个用于模拟平面静电场的程序。程序使用三个类:Vec 类表示平面向量,Particle 类表示带电粒子,Field 类表示静电场。通过这些类,可以计算带电粒子之间的静电力,以及静电场对单个粒子的作用力。

1. 静电场模型

在一个平面静电场中,存在多个带电粒子。每个粒子可以用其位置向量和电荷量来描述。任意一个带电粒子在该电场中所受到的静电力为该粒子对其他所有粒子的静电力的向量和。

2. 代码设计

我们将使用 C++ 实现上述模型,并设计三个类:

  • Vec 类:用于表示二维平面向量。

  • Particle 类:用于表示带电粒子,包含位置向量和电荷量。

  • Field 类:用于表示静电场,包含多个 Particle 对象。

3. 类实现

3.1 Vec 类

#include <iostream>
#include <cmath>

class Vec {
public:
    Vec(float x = 0, float y = 0) : x(x), y(y) {}

    float magnitude() const {
        return sqrtf(x * x + y * y);
    }

    void show() const {
        std::cout << '(' << x << ',' << y << ')' << std::endl;
    }

private:
    float x, y;

    friend Vec add(const Vec& v1, const Vec& v2);
    friend Vec sub(const Vec& v1, const Vec& v2);
    friend Vec mul(const Vec& v, float scalar);
    friend Vec div(const Vec& v, float scalar);
};

Vec add(const Vec& v1, const Vec& v2) {
    return Vec(v1.x + v2.x, v1.y + v2.y);
}

Vec sub(const Vec& v1, const Vec& v2) {
    return Vec(v1.x - v2.x, v1.y - v2.y);
}

Vec mul(const Vec& v, float scalar) {
    return Vec(v.x * scalar, v.y * scalar);
}

Vec div(const Vec& v, float scalar) {
    return Vec(v.x / scalar, v.y / scalar);
}

3.2 Particle 类

#include "Vec.h"

class Particle {
public:
    Particle(const Vec& pos, float charge) : pos(pos), charge(charge) {}

    Vec calcForce(const Particle& other) const {
        Vec r = sub(other.pos, pos);
        float distance = r.magnitude();
        float forceMagnitude = K * std::abs(charge) * std::abs(other.charge) / (distance * distance);
        return mul(r, forceMagnitude / distance);
    }

private:
    Vec pos;
    float charge;
    static const float K = 8.9875517873681764e9; // 库伦常数
};

3.3 Field 类

#include "Particle.h"
#include <vector>

class Field {
public:
    void addParticle(const Particle& p) {
        particles.push_back(p);
    }

    Vec calcForce(const Particle& p) const {
        Vec totalForce(0, 0);
        for (const Particle& particle : particles) {
            totalForce = add(totalForce, particle.calcForce(p));
        }
        return totalForce;
    }

private:
    std::vector<Particle> particles;
};

4. 主函数测试

#include "Field.h"

int main() {
    // 测试 Vec 类
    Vec v1(1, 2), v2(3, 4);
    std::cout << "v1: "; v1.show();
    std::cout << "v2: "; v2.show();
    std::cout << "v1 + v2: "; add(v1, v2).show();
    std::cout << "v1 - v2: "; sub(v1, v2).show();
    std::cout << "v1 * 2: "; mul(v1, 2).show();
    std::cout << "v1 / 3: "; div(v1, 3).show();

    // 测试 Particle 类
    Particle p1(Vec(1, 2), 0.0001), p2(Vec(2, -3), 0.0002);
    std::cout << "p1 对 p2 的静电力: "; p1.calcForce(p2).show();

    // 测试 Field 类
    Field field;
    field.addParticle(Particle(Vec(0, 0), 1e-5));
    field.addParticle(Particle(Vec(1, 2), 2e-5));
    Particle p(Vec(2, 0), -1.5e-5);
    std::cout << "静电场对 p 的静电力: "; field.calcForce(p).show();

    return 0;
}

5. 运行结果

运行上述代码,将输出 Vec 类和 Particle 类以及 Field 类的测试结果,包括向量运算结果、粒子间静电力以及静电场对单个粒子的作用力。

6. 总结

本文设计并实现了用于模拟平面静电场的 C++ 程序。通过该程序,我们可以直观地观察带电粒子之间的相互作用,以及静电场对单个粒子的影响。该程序可以作为学习静电场知识和进行相关研究的工具。

平面静电场模拟程序设计

原文地址: https://www.cveoy.top/t/topic/od0K 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录