# data[].attributes.body
import matplotlib.pyplot as plt

import numpy as np

def ve_tinh_the_kali():

fig = plt.figure(figsize=(8, 8))

ax = fig.add_subplot(111, projection='3d')

# Định nghĩa các đỉnh của hình lập phương (8 đỉnh)

# Tọa độ (x, y, z)

dinh = np.array([

[0, 0, 0], [1, 0, 0], [1, 1, 0], [0, 1, 0],

[0, 0, 1], [1, 0, 1], [1, 1, 1], [0, 1, 1]

])

# Tọa độ nguyên tử ở tâm (đặc trưng của cấu trúc BCC)

tam = np.array([[0.5, 0.5, 0.5]])

# Vẽ các nguyên tử ở đỉnh (màu xanh dương)

ax.scatter(dinh[:, 0], dinh[:, 1], dinh[:, 2], s=500, c='royalblue', label='Nguyên tử K (Đỉnh)')

# Vẽ nguyên tử ở tâm (màu đỏ để dễ phân biệt)

ax.scatter(tam[:, 0], tam[:, 1], tam[:, 2], s=600, c='crimson', label='Nguyên tử K (Tâm)')

# Vẽ các đường nối tạo thành khung hình lập phương

duong_noi = [

[0, 1], [1, 2], [2, 3], [3, 0], # Mặt dưới

[4, 5], [5, 6], [6, 7], [7, 4], # Mặt trên

[0, 4], [1, 5], [2, 6], [3, 7] # Các cạnh đứng

]

for d in duong_noi:

ax.plot3D(*zip(dinh[d[0]], dinh[d[1]]), color="gray", linestyle='--', alpha=0.5)

# Cấu hình tiêu đề và nhãn

ax.set_title('Mô hình Mạng Tinh thể Lập phương Tâm khối (BCC) - Kali (K)', fontsize=14)

ax.set_xlabel('Trục X')

ax.set_ylabel('Trục Y')

ax.set_zlabel('Trục Z')

ax.legend()

plt.show()

if name == "__main__":

ve_tinh_the_kali()

# data[].attributes.attachment_link.title
27. MỘT SỐ TÍNH CHẤT VÀ ỨNG DỤNG PHỨC CHẤT

# data[].attributes.body
mport numpy as np

import plotly.graph_objects as go

from plotly.subplots import make_subplots

a = 1

r = np.sqrt(3)/4 * a # quan hệ BCC

corners = np.array([

[0,0,0],[1,0,0],[0,0,1],[1,0,1],

[0,1,0],[1,1,0],[0,1,1],[1,1,1]

])

center = np.array([0.5,0.5,0.5])

atoms = np.vstack([corners, center])

def sphere(center, radius, res=40):

u = np.linspace(0, 2*np.pi, res)

v = np.linspace(0, np.pi, res)

x = radius*np.outer(np.cos(u), np.sin(v)) + center[0]

y = radius*np.outer(np.sin(u), np.sin(v)) + center[1]

z = radius*np.outer(np.ones(np.size(u)), np.cos(v)) + center[2]

return x,y,z

fig = make_subplots(

rows=1, cols=2,

specs=[[{"type":"surface"},{"type":"surface"}]],

horizontal_spacing=0.08

)

cr_color = "rgb(70,130,180)" # xanh kim loại

stick_color = "rgb(180,220,255)"

for atom in atoms:

x,y,z = sphere(atom, 0.07)

fig.add_surface(

x=x,y=y,z=z,

showscale=False,

colorscale=[[0,cr_color],[1,cr_color]],

lighting=dict(

ambient=0.4,

diffuse=0.9,

specular=1.2,

roughness=0.15

),

row=1,col=1

)

for c in corners:

fig.add_trace(go.Scatter3d(

x=[center[0],c[0]],

y=[center[1],c[1]],

z=[center[2],c[2]],

mode="lines",

line=dict(color=stick_color,width=6),

showlegend=False

),row=1,col=1)

edges = [

[0,1],[0,4],[0,2],

[1,5],[1,3],

[4,5],[4,6],

[2,3],[2,6],

[5,7],[3,7],[6,7]

]

# khung lập phương

for e in edges:

fig.add_trace(go.Scatter3d(

x=[corners[e[0]][0], corners[e[1]][0]],

y=[corners[e[0]][1], corners[e[1]][1]],

z=[corners[e[0]][2], corners[e[1]][2]],

mode="lines",

line=dict(color="white",width=4),

showlegend=False

),row=1,col=1)

for atom in atoms:

x,y,z = sphere(atom, r*0.98)

fig.add_surface(

x=x,y=y,z=z,

showscale=False,

colorscale=[[0,cr_color],[1,cr_color]],

lighting=dict(

ambient=0.3,

diffuse=0.9,

specular=1.5,

roughness=0.1

),

row=1,col=2

)

for e in edges:

fig.add_trace(go.Scatter3d(

x=[corners[e[0]][0], corners[e[1]][0]],

y=[corners[e[0]][1], corners[e[1]][1]],

z=[corners[e[0]][2], corners[e[1]][2]],

mode="lines",

line=dict(color="rgba(200,200,255,0.3)", width=3),

showlegend=False

), row=1, col=2)

fig.update_layout(

title=dict(

text="<b>CẤU TRÚC TINH THỂ BCC CỦA Cr</b><br>"

"<span style='font-size:16px;'>Chromium - Body Centered Cubic</span>",

x=0.5,

font=dict(size=26,color="cyan")

),

paper_bgcolor="black",

plot_bgcolor="black"

)

fig.update_scenes(

xaxis_visible=False,

yaxis_visible=False,

zaxis_visible=False,

aspectmode="cube",

bgcolor="black",

camera=dict(

eye=dict(x=1.6,y=1.6,z=1.2)

)

)

# =========================

# CHÚ THÍCH

# =========================

fig.add_annotation(

text="<b>Mô hình Rỗng (Ball-and-Stick)</b>",

x=0.20,y=0.93,xref="paper",yref="paper",

showarrow=False,

font=dict(size=18,color="white")

)

fig.add_annotation(

text="<b>Mô hình Đặc (Space-Filling)</b>",

x=0.80,y=0.93,xref="paper",yref="paper",

showarrow=False,

font=dict(size=18,color="white")

)

info_text = """

Cấu trúc: Lập phương tâm khối (BCC)<br>

Bán kính nguyên tử ≈ 128 pm<br>

Hằng số mạng a ≈ 2.88 Å<br>

Packing efficiency: 68%

"""

fig.add_annotation(

text=info_text,

x=0.5,y=0.05,

xref="paper",yref="paper",

showarrow=False,

font=dict(size=16,color="cyan"),

align="center"

)

fig.add_annotation(

text="<b>Người thực hiện:Kim Ánh</b><br>",

x=0.01, y=0.01,

xref="paper", yref="paper",

showarrow=False,

align="left",

font=dict(size=14, color="white")

)

# =========================

# XUẤT FILE

# =========================

fig.write_html("Cr_BCC_Advanced.html")

# data[].attributes.body
[Tập tin: W_BCC_Final.html]

[Tập tin: W_model.py]

# data[].attributes.body
Bài tập hóa - Thúy Nga 12a1

# data[].attributes.body
import numpy as np import plotly.graph_objects as go from plotly.subplots import make_subplots a = 1 r = np.sqrt(3)/4 a corners = np.array([ [0,0,0],[1,0,0],[0,0,1],[1,0,1], [0,1,0],[1,1,0],[0,1,1],[1,1,1] ]) center = np.array([0.5,0.5,0.5]) atoms = np.vstack([corners, center]) def sphere(center, radius, res=40): u = np.linspace(0, 2np.pi, res) v = np.linspace(0, np.pi, res) x = radius*np.outer(np.cos(u), np.sin(v)) + center[0] y = radius*np.outer(np.sin(u), np.sin(v)) + center[1] z = radius*np.outer(np.ones(np.size(u)), np.cos(v)) + center[2] return x,y,z fig = make_subplots( rows=1, cols=2, specs=[[{"type":"surface"},{"type":"surface"}]], horizontal_spacing=0.08 ) ba_color = "rgb(0,255,200)" stick_color = "rgb(255,200,0)" for atom in atoms: x,y,z = sphere(atom, 0.07) fig.add_surface( x=x,y=y,z=z, showscale=False, colorscale=[[0,ba_color],[1,ba_color]], lighting=dict( ambient=0.4, diffuse=0.9, specular=1.4, roughness=0.12 ), row=1,col=1 ) for c in corners: fig.add_trace(go.Scatter3d( x=[center[0],c[0]], y=[center[1],c[1]], z=[center[2],c[2]], mode="lines", line=dict(color=stick_color,width=6), showlegend=False ),row=1,col=1) edges = [ [0,1],[0,4],[0,2], [1,5],[1,3], [4,5],[4,6], [2,3],[2,6], [5,7],[3,7],[6,7] ] for e in edges: fig.add_trace(go.Scatter3d( x=[corners[e[0]][0], corners[e[1]][0]], y=[corners[e[0]][1], corners[e[1]][1]], z=[corners[e[0]][2], corners[e[1]][2]], mode="lines", line=dict(color="white",width=4), showlegend=False ),row=1,col=1) for atom in atoms: x,y,z = sphere(atom, r*0.98) fig.add_surface( x=x,y=y,z=z, showscale=False, colorscale=[[0,ba_color],[1,ba_color]], lighting=dict( ambient=0.3, diffuse=0.9, specular=1.7, roughness=0.08 ), row=1,col=2 ) for e in edges: fig.add_trace(go.Scatter3d( x=[corners[e[0]][0], corners[e[1]][0]], y=[corners[e[0]][1], corners[e[1]][1]], z=[corners[e[0]][2], corners[e[1]][2]], mode="lines", line=dict(color="rgba(255,255,255,0.4)", width=3), showlegend=False ), row=1, col=2) fig.update_layout( title=dict( text="<b>CẤU TRÚC TINH THỂ BCC CỦA Ba</b><br>" "<span style='font-size:16px;'>Barium - Body Centered Cubic</span>", x=0.5, font=dict(size=26,color="gold") ), paper_bgcolor="rgb(15,15,30)", plot_bgcolor="rgb(15,15,30)" ) fig.update_scenes( xaxis_visible=False, yaxis_visible=False, zaxis_visible=False, aspectmode="cube", bgcolor="rgb(15,15,30)", camera=dict( eye=dict(x=1.6,y=1.6,z=1.2) ) ) fig.add_annotation( text="<b>Mô hình Rỗng (Ball-and-Stick)</b>", x=0.20,y=0.93,xref="paper",yref="paper", showarrow=False, font=dict(size=18,color="lightgreen") ) fig.add_annotation( text="<b>Mô hình Đặc (Space-Filling)</b>", x=0.80,y=0.93,xref="paper",yref="paper", showarrow=False, font=dict(size=18,color="lightgreen") ) info_text = """ Cấu trúc: Lập phương tâm khối (BCC)<br> Bán kính nguyên tử ≈ 222 pm<br> Số nguyên tử trong ô mạng: 2<br> Packing efficiency: 68% """ fig.add_annotation( text=info_text, x=0.5,y=0.05, xref="paper",yref="paper", showarrow=False, font=dict(size=16,color="orange"), align="center" ) fig.add_annotation( text="<b>Người thực hiện: Phương Nhi</b>", x=0.01, y=0.01, xref="paper", yref="paper", showarrow=False, align="left", font=dict(size=14, color="white") ) fig.write_html("Ba_BCC_Final.html")

# data[].attributes.body
Mô hình cấu trúc tinh thể lập phương tâm khối (BCC) của Sodium (Na).

Gồm:

- Mô hình rỗng (Ball and Stick)

- Mô hình đặc khít (Space Filling)

- Có thông tin bán kính nguyên tử

Bán kính nguyên tử: ~186 pm

Số nguyên tử trong ô mạng: 2

Số phối trí: 8

Người thực hiện: NGỌC ÁNH

PHẦN CODE:

import numpy as np

import matplotlib.pyplot as plt

from mpl_toolkits.mplot3d import Axes3D

# ===== Hàm vẽ hình cầu =====

def draw_sphere(ax, center, radius, color):

u = np.linspace(0, 2 * np.pi, 50)

v = np.linspace(0, np.pi, 50)

x = radius * np.outer(np.cos(u), np.sin(v)) + center[0]

y = radius * np.outer(np.sin(u), np.sin(v)) + center[1]

z = radius * np.outer(np.ones(np.size(u)), np.cos(v)) + center[2]

ax.plot_surface(x, y, z, color=color, shade=True)

# ===== Tạo figure nền tối =====

fig = plt.figure(figsize=(14,7), facecolor='#0b0f2a')

# Các điểm góc BCC

corners = [

(0,0,0), (1,0,0), (0,1,0), (1,1,0),

(0,0,1), (1,0,1), (0,1,1), (1,1,1)

]

# Các cạnh khung lập phương

edges = [

(0,1),(0,2),(0,4),

(1,3),(1,5),

(2,3),(2,6),

(3,7),

(4,5),(4,6),

(5,7),

(6,7)

]

# =========================

# DẠNG RỖNG

# =========================

ax1 = fig.add_subplot(121, projection='3d')

ax1.set_facecolor('#0b0f2a')

ax1.set_axis_off()

# Nguyên tử góc (trắng)

for c in corners:

draw_sphere(ax1, c, 0.08, 'white')

# Nguyên tử tâm (xanh cyan)

draw_sphere(ax1, (0.5,0.5,0.5), 0.12, '#00e5ff')

# Vẽ khung lập phương

for e in edges:

x = [corners[e[0]][0], corners[e[1]][0]]

y = [corners[e[0]][1], corners[e[1]][1]]

z = [corners[e[0]][2], corners[e[1]][2]]

ax1.plot(x,y,z,color='#ffd166', linewidth=2)

ax1.set_xlim(-0.2,1.2)

ax1.set_ylim(-0.2,1.2)

ax1.set_zlim(-0.2,1.2)

ax1.view_init(elev=20, azim=30)

ax1.set_title("Mô hình Rỗng (Ball-and-Stick)", color='white')

# =========================

# DẠNG ĐẶC KHÍT

# =========================

ax2 = fig.add_subplot(122, projection='3d')

ax2.set_facecolor('#0b0f2a')

ax2.set_axis_off()

# Nguyên tử góc (xám nhạt)

for c in corners:

draw_sphere(ax2, c, 0.4, '#cfd8dc')

# Nguyên tử tâm (xanh nổi bật)

draw_sphere(ax2, (0.5,0.5,0.5), 0.45, '#00e5ff')

ax2.set_xlim(-0.2,1.2)

ax2.set_ylim(-0.2,1.2)

ax2.set_zlim(-0.2,1.2)

ax2.view_init(elev=20, azim=30)

ax2.set_title("Mô hình Đặc (Space-Filling)", color='white')

# =========================

# THÔNG TIN

# =========================

fig.text(0.5, 0.95, "CẤU TRÚC TINH THỂ BCC CỦA SODIUM (Na)",

ha='center', fontsize=20, color='#ff99c8', weight='bold')

fig.text(0.5, 0.91, "Sodium - Body Centered Cubic",

ha='center', fontsize=13, color='white')

fig.text(0.5, 0.08,

"Cấu trúc: Lập phương tâm khối (BCC)\n"

"Bán kính nguyên tử: ~186 pm\n"

"Số nguyên tử trong ô mạng: 2\n"

"Số phối trí: 8\n"

"Packing efficiency: 68%",

ha='center', fontsize=12, color='#90dbf4')

fig.text(0.02, 0.02, "Người thực hiện:NGỌC ÁNH",

fontsize=10, color='white')

plt.savefig("cau_truc_sodium.png", dpi=300)

plt.show()

# data[].attributes.attachment_link.title
Chuẩn bị và thực hành làm thí nghiệm xà phòng-20260303T164405Z-3-001

# data[].attributes.body
# Mô hình cấu trúc mạng tinh thể 3D của 1 ô mạng Kali (K)
# Cấu trúc: Lập phương tâm khối (BCC)
# Có thêm kích thước hạt và màu sắc

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# ----- Độ dài cạnh ô mạng -----
a = 1.0

# ----- Tọa độ các nguyên tử -----
dinh = np.array([
    [0, 0, 0],
    [a, 0, 0],
    [0, a, 0],
    [a, a, 0],
    [0, 0, a],
    [a, 0, a],
    [0, a, a],
    [a, a, a]
])

tam_khoi = np.array([[a/2, a/2, a/2]])

# ----- Vẽ mô hình -----
hinh = plt.figure()
truc = hinh.add_subplot(111, projection='3d')

# Vẽ nguyên tử ở đỉnh (màu xanh dương, kích thước nhỏ hơn)
truc.scatter(
    dinh[:,0], dinh[:,1], dinh[:,2],
    s=1500, c='darkblue'
)

# Vẽ nguyên tử ở tâm khối (màu đỏ, kích thước lớn hơn)
truc.scatter(
    tam_khoi[:,0], tam_khoi[:,1], tam_khoi[:,2],
    s=2000, c='crimson'
)

# ----- Vẽ các cạnh của hình lập phương -----
canh = [
    (0,1),(0,2),(1,3),(2,3),
    (4,5),(4,6),(5,7),(6,7),
    (0,4),(1,5),(2,6),(3,7)
]

for i, j in canh:
    truc.plot(
        [dinh[i][0], dinh[j][0]],
        [dinh[i][1], dinh[j][1]],
        [dinh[i][2], dinh[j][2]]
    )

truc.set_box_aspect([1,1,1])
truc.set_xticks([])
truc.set_yticks([])
truc.set_zticks([])

plt.show()

# data[].attributes.body
Phạm Công Sơn

# data[].attributes.attachment_link.readable_text
from vpython import *
#Web VPython 3.2
# Web VPython 3.2

# 1. Thi���t l���p kh��ng gian n���n tr���ng tinh kh��i
scene = canvas(title="Beryli (Be) HCP - T��m Th���ch Anh Sang Tr���ng", 
               width=950, height=650, background=color.white)
scene.lights = []
# ����n r���i t���o ����� b��ng cao (Specular Highlights)
distant_light(direction=vector(1, 1, 1), color=color.white)
distant_light(direction=vector(-1, -0.8, 1), color=color.gray(0.5))
scene.ambient = color.gray(0.6) 

# 2. Tham s��� m���ng HCP cho Beryli (Be)
# Beryli c�� c���u tr��c L���c ph����ng x���p ch���t (HCP)
a = 2.28 
c = 3.58 
PI = 3.14159
r_thin = 0.5   
r_thick = a / 2 

# M��U S���C: T��m Amethyst ph���i Lavender (R���t �����p tr��n n���n tr���ng)
color_top_bottom = vector(0.5, 0.2, 0.8) # T��m �����m th���ch anh
color_middle = vector(0.7, 0.5, 1.0)     # T��m Lavender nh���t

def draw_be(offset, mode):
    r = r_thin if mode == "thin" else r_thick
    
    # --- T���ng A (D�����i h=0 v�� Tr��n h=c) ---
    for h in [0, c]:
        # Nguy��n t��� t��m c���a m���t l���c gi��c
        sphere(pos=vector(0, h, 0) + offset, radius=r, 
               color=color_top_bottom, shininess=1, metallic=True)
        
        # 6 nguy��n t��� ��� c��c �����nh
        for i in range(6):
            angle = i * (2 * PI / 6)
            pos_atom = vector(a * cos(angle), h, a * sin(angle))
            sphere(pos=pos_atom + offset, radius=r, 
                   color=color_top_bottom, shininess=1, metallic=True)
            
            # V��� khung n���i thanh m���nh (m��u x��m �����m ����� n���i b���t tr��n n���n tr���ng)
            if mode == "thin":
                next_angle = (i + 1) * (2 * PI / 6)
                next_pos = vector(a * cos(next_angle), h, a * sin(next_angle))
                # N���i v��ng l���c gi��c
                cylinder(pos=pos_atom + offset, axis=next_pos - pos_atom, 
                         radius=0.05, color=color.gray(0.4))
                # N���i c��c c���t �����ng gi���a 2 t���ng
                if h == 0:
                    cylinder(pos=pos_atom + offset, axis=vector(0, c, 0), 
                             radius=0.05, color=color.gray(0.4))

    # --- T���ng B (3 nguy��n t��� l���p gi���a t���i h=c/2) ---
    for i in [1, 3, 5]:
        angle = i * (2 * PI / 6)
        dist_center = a / 1.732 
        pos_mid = vector(dist_center * cos(angle), c/2, dist_center * sin(angle))
        sphere(pos=pos_mid + offset, radius=r, 
               color=color_middle, shininess=1, metallic=True)

# 3. V��� hai m�� h��nh r���ng v�� kh��t
label(pos=vector(-5, c + 1.2, 0), text="Be - D���ng R���ng", color=color.black, box=False)
draw_be(vector(-4.5, -1, 0), "thin")

label(pos=vector(5, c + 1.2, 0), text="Be - D���ng Kh��t", color=color.black, box=False)
draw_be(vector(4.5, -1, 0), "thick")

# 4. Camera nh��n tr���c di���n, kh��ng xoay t��� �����ng ����� tr��nh lag
scene.center = vector(0, 1, 0)

# data[].attributes.attachment_link.description
Get access to files anywhere through secure cloud storage and file backup for your photos, videos, files and more with Google Drive.

# data[].attributes.body
lê văn thái

# data[].attributes.attachment_link.readable_text
from vpython import *
#Web VPython 3.2
## Web VPython 3.2

# 1. Thi���t l���p s��n kh���u s��ng s���a, sang tr���ng
scene = canvas(title="<b>M�� ph���ng Canxi FCC - Phi��n b���n ��nh Kim S��ng</b>", 
               width=1000, height=600, 
               background=color.gray(0.9)) # N���n x��m tr���ng c���c s��ng
scene.lights = [] 
# H��� th���ng ����n studio: ����n ch��nh, ����n ph��� v�� ����n bao quanh
distant_light(direction=vector(1, 1, 1), color=color.white)
distant_light(direction=vector(-1, 0.5, 1), color=color.white)
scene.ambient = color.gray(0.6) # T��ng ����� s��ng m��i tr�����ng ����� kh��� b��ng t���i

# 2. Th��ng s��� m���ng
a = 5
r_thin = 0.55
r_thick = (a * sqrt(2)) / 4

# M��u s���c: B���c s��ng (White Chrome) v�� Xanh Cyan nh��� ����� ph��n bi���t
color_ca_bright = vector(0.95, 0.95, 1.0) # Tr���ng b���c ��nh xanh
color_face_bright = vector(0.4, 0.8, 1.0)  # Xanh n�����c bi���n s��ng (cho t��m m���t)

def draw_ca_fcc(pos_offset, mode):
    rad = r_thin if mode == "thin" else r_thick
    coords = [0, a]
    mid = a / 2
    
    # V��� 8 nguy��n t��� ��� �����nh (M��u B���c s��ng)
    for x in coords:
        for y in coords:
            for z in coords:
                sphere(pos=vector(x, y, z) + pos_offset, radius=rad, 
                       color=color_ca_bright, 
                       shininess=1, metallic=True, # Hi���u ���ng kim lo���i m���nh
                       emissive=False)
    
    # V��� 6 nguy��n t��� ��� t��m m���t (M��u Cyan s��ng)
    face_centers = [
        vector(mid, mid, 0), vector(mid, mid, a),
        vector(mid, 0, mid), vector(mid, a, mid),
        vector(0, mid, mid), vector(a, mid, mid)
    ]
    
    for f in face_centers:
        sphere(pos=f + pos_offset, radius=rad, 
               color=color_face_bright, 
               shininess=1, metallic=True)

    # Khung n���i cho d���ng r���ng (D��ng m��u v��ng kim nh���t cho sang)
    if mode == "thin":
        for x in coords:
            for y in coords:
                cylinder(pos=vector(x, y, 0) + pos_offset, axis=vector(0, 0, a), radius=0.08, color=vector(0.8, 0.7, 0.5))
                cylinder(pos=vector(x, 0, y) + pos_offset, axis=vector(0, a, 0), radius=0.08, color=vector(0.8, 0.7, 0.5))
                cylinder(pos=vector(0, x, y) + pos_offset, axis=vector(a, 0, 0), radius=0.08, color=vector(0.8, 0.7, 0.5))

# 3. V��� 2 m�� h��nh
label(pos=vector(-6, a + 1.5, 0), text="D���NG R���NG", height=15, color=color.black)
draw_ca_fcc(vector(-6, 0, 0), "thin")

label(pos=vector(6, a + 1.5, 0), text="D���NG KH��T", height=15, color=color.black)
draw_ca_fcc(vector(6, 0, 0), "thick")

scene.center = vector(0, 2, 0)

# data[].attributes.body
chuẩn bị

# data[].attributes.body
chuẩn bị