File size: 4,121 Bytes
23d0f76
ef88128
 
23d0f76
8f35c4e
23d0f76
8f35c4e
23d0f76
 
 
 
 
 
 
 
ef88128
23d0f76
 
 
8f35c4e
23d0f76
 
 
 
ef88128
 
 
 
 
8f35c4e
ef88128
 
 
8f35c4e
 
 
 
 
 
ef88128
8f35c4e
ef88128
 
 
8f35c4e
 
ef88128
 
 
 
 
23d0f76
 
ef88128
23d0f76
8f35c4e
23d0f76
8f35c4e
23d0f76
 
 
 
 
 
 
ef88128
23d0f76
ef88128
 
 
 
 
 
 
 
 
 
 
23d0f76
 
8f35c4e
 
23d0f76
8f35c4e
 
23d0f76
 
ef88128
23d0f76
 
ef88128
 
8f35c4e
 
ef88128
8f35c4e
ef88128
23d0f76
 
ef88128
 
 
8f35c4e
 
ef88128
 
 
8f35c4e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

def visualize_results(simulator, length, width, thickness, stress, deformation):
    """
    Generates 3D and 2D visualizations for simulation results.
    Parameters:
        simulator (str): Name of the simulator (e.g., 'Python-Based Solver').
        length (float): Length of the object.
        width (float): Width of the object.
        thickness (float): Thickness of the object.
        stress (float): Stress value.
        deformation (float): Deformation value.
    Returns:
        str: Path to the 3D and 2D visualization images.
    """
    # Generate 2D bar chart
    fig, ax = plt.subplots(figsize=(6, 4))
    ax.bar(["Stress", "Deformation"], [stress, deformation], color=["red", "blue"])
    ax.set_title(f"Simulation Results ({simulator})")
    ax.set_ylabel("Magnitude")
    ax.grid(True, linestyle="--", alpha=0.6)
    
    # Save 2D chart
    output_2d_path = "results_2d.png"
    plt.savefig(output_2d_path)
    plt.close(fig)
    
    # Generate 3D bar chart
    fig = plt.figure(figsize=(8, 6))
    ax = fig.add_subplot(111, projection='3d')
    
    x = np.array([1, 2])
    y = np.array([0, 0])
    z = np.array([0, 0])
    dx = np.array([1, 1])
    dy = np.array([1, 1])
    dz = np.array([stress, deformation])
    
    ax.bar3d(x, y, z, dx, dy, dz, color=["red", "blue"], alpha=0.6)
    ax.set_xlabel('Parameters')
    ax.set_ylabel('Category')
    ax.set_zlabel('Magnitude')
    ax.set_xticks([1, 2])
    ax.set_xticklabels(['Stress', 'Deformation'])
    ax.set_title(f"3D Simulation Results ({simulator})")

    # Save 3D chart
    output_3d_path = "results_3d.png"
    plt.savefig(output_3d_path)
    plt.close(fig)

    return output_2d_path, output_3d_path

def visualize_end_product(simulation_type, length, width, thickness, deformation):
    """
    Visualize the end product based on the parameters with 3D visualization.
    Parameters:
        simulation_type (str): 'plate' or 'beam'.
        length (float): Length of the product (mm).
        width (float): Width of the product (mm).
        thickness (float): Thickness of the product (mm).
        deformation (float): Deformation (mm).
    Returns:
        str: Path to the saved image of the 3D visualization.
    """
    fig = plt.figure(figsize=(8, 6))
    ax = fig.add_subplot(111, projection='3d')
    
    # Create a grid of coordinates for the surface
    x = np.linspace(0, length, 10)
    y = np.linspace(0, width, 10)
    x, y = np.meshgrid(x, y)
    z = np.zeros_like(x)  # Base plane
    
    # Add deformation to the surface
    z_deformed = z + np.random.normal(0, deformation / 10, size=z.shape)  # Adding deformation visually
    
    if simulation_type == "plate":
        ax.plot_surface(x, y, z_deformed, color='lightblue', alpha=0.8)
        ax.text(length / 2, width / 2, np.max(z_deformed) + 2, f"Deformation: {deformation:.2f} mm", color="red", fontsize=10, ha="center")
    elif simulation_type == "beam":
        ax.plot_surface(x, y, z_deformed, color='lightgreen', alpha=0.8)
        ax.text(length / 2, thickness / 2, np.max(z_deformed) + 2, f"Deflection: {deformation:.2f} mm", color="red", fontsize=10, ha="center")
    else:
        raise ValueError("Invalid simulation type.")
    
    # Add dimensions
    ax.set_xlabel("Length (mm)")
    ax.set_ylabel("Width (mm)")
    ax.set_zlabel("Deformation (mm)")
    ax.set_title(f"3D Visualization of {simulation_type.capitalize()} End Product")
    
    # Save the 3D visualization
    output_3d_path = f"{simulation_type}_end_product_3d.png"
    plt.savefig(output_3d_path)
    plt.close(fig)

    return output_3d_path

# Example usage:
simulate_results_2d_path, simulate_results_3d_path = visualize_results('Python-Based Solver', 200, 100, 20, 350, 0.02)
end_product_3d_path = visualize_end_product('plate', 200, 100, 20, 0.02)

print(f"2D Simulation Visualization saved at: {simulate_results_2d_path}")
print(f"3D Simulation Visualization saved at: {simulate_results_3d_path}")
print(f"3D End Product Visualization saved at: {end_product_3d_path}")