已知 空间 两点 A B ,求 A到 B 延长 线 上 C 点 C 到B 的距离 为 某个值 比如 0.1 米 给出 python 代码 并且 画出图像

部署运行你感兴趣的模型镜像
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

def find_point_on_extension(A, B, distance_from_B=0.5):
    """
    在AB延长线上找到点C,使得C到B的距离为指定值
    
    参数:
    A, B: 空间两点坐标 (x, y, z)
    distance_from_B: C到B的距离
    
    返回:
    C: 延长线上的点坐标
    direction: 单位方向向量
    """
    # 计算向量AB
    AB = np.array(B) - np.array(A)
    
    # 计算向量AB的模长
    AB_length = np.linalg.norm(AB)
    
    if AB_length == 0:
        raise ValueError("点A和点B不能重合")
    
    # 计算单位方向向量
    direction = AB / AB_length
    
    # 计算点C的坐标 (从B点沿AB方向延伸指定距离)
    C = np.array(B) + direction * distance_from_B
    
    return C, direction

def plot_points_and_line(A, B, C, distance_from_B):
    """
    绘制空间中的三个点和连接线
    """
    fig = plt.figure(figsize=(10, 8))
    ax = fig.add_subplot(111, projection='3d')
    
    # 提取坐标
    x_coords = [A[0], B[0], C[0]]
    y_coords = [A[1], B[1], C[1]]
    z_coords = [A[2], B[2], C[2]]
    
    # 绘制点
    ax.scatter(x_coords, y_coords, z_coords, c=['red', 'blue', 'green'], s=100)
    
    # 绘制线段
    # AB线段
    ax.plot([A[0], B[0]], [A[1], B[1]], [A[2], B[2]], 'b-', linewidth=2, label='AB线段')
    # BC线段
    ax.plot([B[0], C[0]], [B[1], C[1]], [B[2], C[2]], 'g--', linewidth=2, label='BC延长线')
    
    # 添加标签
    ax.text(A[0], A[1], A[2], '  A', fontsize=12, color='red')
    ax.text(B[0], B[1], B[2], '  B', fontsize=12, color='blue')
    ax.text(C[0], C[1], C[2], '  C', fontsize=12, color='green')
    
    # 设置坐标轴标签
    ax.set_xlabel('X坐标')
    ax.set_ylabel('Y坐标')
    ax.set_zlabel('Z坐标')
    
    # 添加标题
    plt.title(f'空间点延长线计算\nBC距离: {distance_from_B}米')
    
    # 添加图例
    ax.legend()
    
    # 设置相等的坐标轴比例,保持图形比例正确
    max_range = max(max(x_coords)-min(x_coords), 
                   max(y_coords)-min(y_coords), 
                   max(z_coords)-min(z_coords))
    mid_x = (max(x_coords)+min(x_coords)) * 0.5
    mid_y = (max(y_coords)+min(y_coords)) * 0.5
    mid_z = (max(z_coords)+min(z_coords)) * 0.5
    ax.set_xlim(mid_x - max_range*0.6, mid_x + max_range*0.6)
    ax.set_ylim(mid_y - max_range*0.6, mid_y + max_range*0.6)
    ax.set_zlim(mid_z - max_range*0.6, mid_z + max_range*0.6)
    
    plt.tight_layout()
    plt.show()

def calculate_additional_info(A, B, C):
    """
    计算并显示额外的几何信息
    """
    AB = np.array(B) - np.array(A)
    BC = np.array(C) - np.array(B)
    
    AB_length = np.linalg.norm(AB)
    BC_length = np.linalg.norm(BC)
    AC_length = np.linalg.norm(np.array(C) - np.array(A))
    
    print("\n几何信息:")
    print(f"AB距离: {AB_length:.3f} 米")
    print(f"BC距离: {BC_length:.3f} 米")
    print(f"AC距离: {AC_length:.3f} 米")
    
    # 验证共线性
    cross_product = np.linalg.norm(np.cross(AB, BC))
    if cross_product < 1e-10:
        print("验证: A, B, C 三点共线 ✓")
    else:
        print("警告: A, B, C 三点不共线 ✗")

# 主程序
if __name__ == "__main__":
    # 示例点坐标 (可以修改这些值)
    A = np.array([1.0, 2.0, 3.0])  # 点A坐标
    B = np.array([4.0, 6.0, 8.0])  # 点B坐标
    distance_from_B = 5         # C到B的距离
    
    print("已知点坐标:")
    print(f"A: {A}")
    print(f"B: {B}")
    print(f"目标距离 BC: {distance_from_B} 米")
    
    try:
        # 计算点C
        C, direction = find_point_on_extension(A, B, distance_from_B)
        
        print(f"\n计算结果:")
        print(f"C点坐标: ({C[0]:.3f}, {C[1]:.3f}, {C[2]:.3f})")
        print(f"方向向量: ({direction[0]:.3f}, {direction[1]:.3f}, {direction[2]:.3f})")
        
        # 计算额外信息
        calculate_additional_info(A, B, C)
        
        # 绘制图形
        plot_points_and_line(A, B, C, distance_from_B)
        
    except ValueError as e:
        print(f"错误: {e}")


在这里插入图片描述

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值