Skip to main content

A comprehensive scientific calculation library with astronomy, physics, chemistry, terrain generation and video processing capabilities

Project description

freebCalculate库

develop by freebird


License PyPI version Python


依赖

本库依赖以下第三方库:

numpy astropy scipy matplotlib mpmath scikit-image geopandas shapely
opencv-contrib-python openvino pubchempy rdkit noise pillow landlab
pandas sqlalchemy

注意,不是所有功能都需要第三方库,可以按需下载,哪些功能需要第三方库详见下表。


功能

名称 用途 依赖
astro_simulator.py 星图生成 numpy astropy scipy pandas sqlalchemy
spacetime_event.py 光锥计算
formula_cal.py 常用公式计算 numpy scipy mpmath matplotlib
equation_solver.py 求解方程*
number_operations.py 数字计算*
spacetime_coordinate.py 四维坐标系
contour_map.py 等高线地形图生成* numpy scipy scikit-image geopandas shapely matplotlib
video_interpolator.py 视频插帧 numpy opencv-contrib-python openvino
npc_manager.py 游戏NPC管理
orbital_dynamics.py 轨道模拟 numpy scipy matplotlib astropy
element_manager.py 化合物管理 element_data (用于示例)
element_generate.py 化合物生成* element_data (用于示例) pubchempy rdkit
terrain_generator.py 地形生成 numpy scipy noise pillow matplotlib landlab

*号代表不成熟,不建议使用。


安装和使用

基础安装

pip install freebirdcal

安装可选功能

# 安装天文功能
pip install freebirdcal[astronomy]

# 安装视频处理功能
pip install freebirdcal[video]

# 安装化学功能
pip install freebirdcal[chemistry]

# 安装地形生成功能
pip install freebirdcal[terrain]

# 安装全部功能
pip install freebirdcal[full]

示例

astro_simulator.py 用于星图生成

from astro_simulator import AstronomicalSimulator

# 初始化模拟器
sim = AstronomicalSimulator(
    image_size=2048,  # 图像尺寸
    pixel_scale=0.2,  # 0.2角秒/像素
    zeropoint=25.0,   # 星等零点
    gain=2.0          # 相机增益
)

# 生成恒星参数
stars = sim.generate_stars(num_stars=500, min_mag=18, max_mag=24)

# 生成PSF核(Moffat分布)
psf = sim.generate_psf(fwhm=3.0, profile='moffat')

# 生成图像(包含背景噪声)
image = sim.generate_image(stars, psf, sky_brightness=21.0)

# 生成星表
catalog = sim.generate_catalog(stars)

# 保存为FITS
sim.save_to_fits(image, catalog, 'observation.fits')

spacetime_event.py 用于光锥计算

from spacetime_event import SpacetimeEvent, relativistic_velocity_addition

# 光子沿x轴运动(c=1自然单位)
photon_start = SpacetimeEvent(0, 0, 0)
photon_end = photon_start.move(1, 0, 5)  # 以光速运动5秒
print(photon_end)  # 输出: SpacetimeEvent(x=5, y=0, t=5, c=1)
print(photon_start.interval_type(photon_end))  # 输出: lightlike(类光间隔)

# 飞船加速到0.8c后,自身经历1秒
earth_event = SpacetimeEvent(0, 0, 0)
final_event = earth_event.boost_and_move(0.8, 0, 1)
print(f"实际地球时间: {final_event.t:.4f}秒")  # 输出: 1.6667秒

# 原参考系速度0.9c,叠加0.9c同方向速度
wx, wy = relativistic_velocity_addition(0.9, 0, 0.9, 0)
print(f"合成速度: {wx:.5f}c")  # 输出: 0.99448c(仍小于c)

formula_cal.py 用于常用公式计算

import numpy as np
import formula_cal as fc

# 计算地球逃逸速度 (使用NumPy数组支持批量计算)
earth_mass = 5.97237e24  # kg
earth_radius = 6.3781e6  # m
print(f"地球逃逸速度: {fc.escape_velocity(earth_mass, earth_radius):.2f} m/s")

# 计算长直导线磁场
I = 1.0  # 1A电流
dl = np.array([0, 0, 1e-3])  # 1mm导线段
B = fc.biot_savart(I, dl, [0.1, 0, 0])  # 10cm外观测点
print(f"磁场: {B} T (理论值: [0, 2e-6, 0] T)")

# 计算抛体运动轨迹
t = np.linspace(0, 3, 30)
x, y = fc.projectile_motion(50, 45, t)
print("抛射最高点:", np.max(y), "m")

# 几何光学示例
print("水中到空气临界角:", fc.snells_law(1.33, 1.0, 90))  # 应返回NaN(全反射)

equation_solver.py 用于求解方程

from equation_solver import EquationSolver
solver = EquationSolver()

# 一元一次方程
print("一元一次方程解:", solver.solve_linear_1v(2, -4))  # 2x -4 = 0 → x=2

# 一元二次方程
print("一元二次方程解:", solver.solve_quadratic_1v(1, -3, 2))  # x²-3x+2=0 → (2,1)

# 二元一次方程组
print("二元一次方程组解:",
      solver.solve_linear_2v([[3, 2], [2, -1]], [7, 4]))  # 3x+2y=7, 2x-y=4 → (3,2)

# 三元一次方程组
print("三元一次方程组解:",
      solver.solve_linear_3v([[2, 1, 1], [1, 3, 2], [1, 0, 1]], [4, 5, 1]))  # 解为(1,1,1)

# 二元二次方程组(线性+二次)
print("二元二次方程组解:",
      solver.solve_quadratic_2v((1, 1, 3), (1, 1, 0, 0, 0, -9)))  # x+y=3, x²+y²=9 → (3,0)和(0,3)

number_operations.py 用于数字计算

from number_operations import NumberOperations

# 分数和基本运算
num1 = NumberOperations("2/3 + 1/6")
print(num1.value)  # (0.8333333333333333+0j)
# 希腊字母支持
num2 = NumberOperations("π/2")
print(num2.value)  # (1.5707963267948966+0j)
# 复数运算
num3 = NumberOperations("sqrt(-4) + 3^2")  # 2j + 9
print(num3.power(0.5))  # 开平方计算结果
# 因数分解
num4 = NumberOperations("12")
print(num4.factorize())  # [2, 2, 3]

spacetime_coordinate.py 用于四维坐标系

from spacetime_coordinate import SpacetimeCoordinateSystem

# 初始化坐标系
system = SpacetimeCoordinateSystem()

# 添加两个坐标点(相对原点)
point1 = system.add_point(x_rel=2, y_rel=3, z_rel=1, t_rel=0)
point2 = system.add_point(x_rel=5, y_rel=7, z_rel=2, t_rel=4)

# 计算空间距离(应输出 5.0)
distance = system.calculate_space_distance(point1, point2)
print(f"空间距离: {distance}")

# 计算时间距离(应输出 4.0)
time_diff = system.calculate_time_distance(point1, point2)
print(f"时间距离: {time_diff}")

# 模拟点1以速度(1,2,3)移动5单位时间
new_coords = system.move_point(point1, vx=1, vy=2, vz=3, time=5)
print(f"移动后坐标: {new_coords}")

contour_map.py 用于等高线地形图生成

from contour_map import VirtualContourMapGenerator

# 初始化生成器
generator = VirtualContourMapGenerator(
    width=300,
    height=300,
    resolution=30.0,
    elevation_range=(100, 1500),
    contour_interval=100,
    noise_scale=4.0
)

# 生成数据
generator.generate_elevation()
generator.generate_contours()

# 可视化并保存
generator.plot_contours(save_path="contour_map.png")
generator.save_to_shapefile("output/contour_map.shp")

video_interpolator.py 用于视频插帧

from video_interpolator import VideoInterpolator

interpolator = VideoInterpolator(
        input_path='input.mp4',
        output_path='output.mp4',
        interp_factor=2,  # 每两帧之间插入2帧
        method='optical_flow',
        use_gpu=True
    )

interpolator.process()
print("视频插帧处理完成")

npc_manager.py 用于游戏NPC管理

from npc_manager import BaseNPC

npc = BaseNPC(
    identifier=1002,
    name="XXX",
    nickname="xxx",
    age=28,
    position=Position(120, 45, 2023),
    faction="xxxx",
    image_path=None,
    quotes=[
        "xxxx,xxxxx!",
        "xxxxxxx~"
    ]
)

npc.move_to(130, 50)  # 空间移动
npc.time_travel(2025)  # 时间跳跃
print(npc.speak())  # 随机语录输出
print(npc.get_info())  # 查看完整信息

orbital_dynamics.py 用于轨道模拟

from orbital_dynamics import OrbitalDynamics

# 初始化低地球轨道
orb = OrbitalDynamics(
    a=6778, e=0.0, i=45, raan=30, argp=0, nu=0,
    mass=2000, propellant=500,
    isp=300, J2=True
)
# 执行机动序列
sequence = [
    ('coplanar', 800),  # 提升到800km高度
    ('plane', 28, 15),  # 调整到倾角28°, RAAN 15°
    ('bielliptic', 10000),  # 双椭圆转移到10000km中间轨道
    ('phase', 90, 86400)  # 24小时内调整90°相位
]
orb.apply_maneuver_sequence(sequence)
# 可视化轨道演化
states = orb.propagate(3600 * 24 * 7, steps=10000)
orb.plot_3d()
orb.plot_parameters()
# 打印机动记录
print("\n机动历史记录:")
for name, dv in orb.maneuver_history:
    print(f"{name}: {dv * 1e3:.2f} m/s")

element_manager.py 用于化合物管理

# 示例使用铀化合物管理器
from element_manager import UraniumCompoundManager("U")

# 初始化系统
uranium_mgr = UraniumCompoundManager("U")

# 添加新化合物
uranium_mgr.add_compound(
    name="氧化铀钠",
    formula="Na2UO4",
    oxidation_states=[6],
    phase="固体",
    uses=["陶瓷着色"]
)

# 查询化合物
print(uranium_mgr.find_by_formula("UF6"))

# 获取核特性报告
nuclear_report = uranium_mgr.get_nuclear_properties()

element_generate.py 用于化合物生成

import element_generate
import element_data

# 两种元素组成的化合物
calculator = element_generate.ElementCompoundGenerate(element_data.oxidation_states)
compounds = calculator.calculate_compounds()
for compound in compounds:
    compound = element_generate.standardize_formula(compound)
    print(compound + "  " + str(element_generate.is_chemical_formula_valid(compound)))
    
# 三种元素组成的化合物
calculator = element_generate.ThreeElementCompoundGenerate(element_data.oxidation_states)
compounds = calculator.calculate_compounds(max_coeff=3)
for compound in compounds:
    compound = element_generate.standardize_formula(compound)
    print(compound + "  " + str(element_generate.is_chemical_formula_valid(compound)))

terrain_generator.py 用于地形生成

from terrain_generator import TerrainGenerator

# 初始化生成器
gen = TerrainGenerator(
    shape=(513, 513),   # 地形分辨率(2^n+1)
    dx=10.0,            # 网格间距(米)
    seed=42             # 随机种子
)

# 方式一:一键生成完整地形(推荐)
gen.run_full_pipeline(
    total_time=300000,      # 模拟总时间(年)
    dt=100,                 # 时间步长(年)
    micro_amplitude=30,     # 微观细节幅度(米)
    micro_scale=80,         # 细节尺度(像素)
    river_threshold=500000, # 河流汇水面积阈值(平方米)
    save_plots=True,        # 保存可视化图
    out_prefix="my_terrain" # 输出文件名前缀
)
# 输出文件:
#   my_terrain_heightmap.raw   (Unity 高度图)
#   my_terrain_splatmap.png    (纹理权重图)
#   my_terrain_visualization.png (可视化图)

# 方式二:分步执行(自定义流程)
# 生成初始地形
gen.initial_topography(scale=300, octaves=7)

# 运行水力侵蚀
gen.run_erosion(total_time=300000, dt=100)

# 添加微观细节
gen.add_micro_details(amplitude=30, scale=80)

# 提取河流网络
gen.extract_rivers(threshold_m2=500000)

# 生成纹理权重图(splatmap)
gen.generate_splatmap()

# 保存结果
gen.save_raw("custom_heightmap.raw")
gen.save_splatmap_png("custom_splatmap.png")

使用

  • 详细文档在docs目录里,注意formula_cal.py和number_operations.py没有对应文档。
  • number_operations.py不成熟,计算复杂表达式时可能出错。
  • element_data.py存储着所有元素的相对原子质量和化合价,以及用于示例的铀和铜的化合物列表.
  • zen_fractal.py没啥用处,依赖pygame,不过可以点开玩玩:python -m freebirdcal.zen_fractal

freebird fly in the sky~

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

freebirdcal-0.1.4.tar.gz (160.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

freebirdcal-0.1.4-py3-none-any.whl (130.5 kB view details)

Uploaded Python 3

File details

Details for the file freebirdcal-0.1.4.tar.gz.

File metadata

  • Download URL: freebirdcal-0.1.4.tar.gz
  • Upload date:
  • Size: 160.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for freebirdcal-0.1.4.tar.gz
Algorithm Hash digest
SHA256 6734cc257c7310d4e0f468f3c9ac86ce0ab519dcb7ab4b8a6df27e740b05fb4a
MD5 1382e6c74d5db4f0224c6d949ec0531c
BLAKE2b-256 93d0b7e399f824d0d895c40b359d5b02725f038199ffbb563218f5dd54525221

See more details on using hashes here.

File details

Details for the file freebirdcal-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: freebirdcal-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 130.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for freebirdcal-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 7bf198b166337e9eb662f8fa8e140d70a33db9892917f4e8153faffd8372d805
MD5 107ef5ea29085a7c91f3fd2a79424c02
BLAKE2b-256 d04cd9c927454230a5c79c6844e98ddf349fc9d3ecf3981a413d38f7b9d147ff

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page