社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

当Python遇到C4D(上)

3D科研绘图 • 4 年前 • 1015 次点击  

大家好,我是独孤嘌呤。


今天的视频时间有点长,将近一个小时,而且还只是上半段。内容是教大家用C4D做一个可以用螺旋指数(chirality index)m和n来控制的碳纳米管。


何为碳纳米管的螺旋指数?我们可以通过下图得到答案。图中有两个基本向量a1a2,分别乘以n和m然后相加,就可以得到一个表示碳纳米管原子排列方向的矢量Ch。它们之间满足关系Ch = na1 + ma2。位于平面内且垂直于Ch的方向即碳纳米管的轴向。

https://www.news-medical.net/whitepaper/20160928/Rapid-and-Quantitative-Differentiation-of-Single-Walled-and-Double-Walled-Carbon-Nanotubes-using-Analytical-Ultracentrifugation.aspx


不同的n和m值可以得到不同类型的碳纳米管,一般来说:当m=0时,得到的是Zig-zag型;当m=n时,得到的是Armchair型;介于两者之间则是Chiral型。


按照这一思路,我们在C4D中先创建出蜂窝状的克隆平面,然后在平面上框选出不同大小的矩形,最后卷曲360°即可得到碳纳米管。随着矩形和六边形蜂窝平面之间的夹角变化,便可以在不同类型之间切换。


本期视频内容包括用户数据的设置,XPresso标签的添加,Python节点编辑等。为了简化计算量,这里选择将矩形固定,对克隆平面进行旋转。


由于之前我没有系统讲过C4D中的Python基础知识,大家可以先去b站搜索飞舞的团子“关于C4D和Python那些事”基础教程。今天的视频学完了可以用m和n来控制蜂窝平面的旋转,最终得到一个矩形范围内的蜂窝平面。


当然,XPresso编辑是少不了的。这里用到了Python节点,C4D中的Python编辑最大的特点就是经常会用到矢量。毕竟是三维软件,不管是尺寸、位置还是角度、速度,都可以用矢量来表示。所以一些常用的矢量相关的函数可以稍作了解,比如c4d.Vector()、VectorAngle()、GetLength()等。熟能生巧,写得多了,自然而然就有经验了。


现有代码如下(还不完整,下一期会给出完全版):
👈可向左滑动

import c4d
from c4d.utils import VectorAngle
from math import *

def main():
    global pos0,pos1,pos2,pos3,theta
    global nw,nh
    a1 = c4d.Vector(0,sqrt(3)*0.5*a,1.5*a)
    a2 = c4d.Vector(0,-sqrt(3)*0.5*a,1.5*a)
    v1 = n*a1+m*a2
    v2 = c4d.Vector(0,0,1)
    theta = VectorAngle(v1,v2)

    # spline vertex position
    pos 0 = c4d.Vector(0,0,-v1.GetLength()*0.5+a/2)
    pos1 = c4d.Vector(0,0,v1.GetLength()*0.5+a/2)
    pos2 = c4d.Vector(0,l*a,v1.GetLength()*0.5+a/2)
    pos3 = c4d.Vector(0,l*a,-v1.GetLength()*0.5+a/2)

    # clone parameters
    w = (pos3.y*tan(theta)-pos0.z)*cos(theta)
    nw = int(2*w/a)
    h = pos2.y/cos(theta)+(pos1.z-pos2.y*tan(theta))*sin(theta)
    nh = int(3*h/a)


以下是本期的详细视频——


可能对大多数人来说,这个教程的难度偏大。但人生在世,不挑战下自己岂不是白来一遭。下一期视频会继续讲解扭曲变形器的设置,m和n之间数值关系和限制的设置(n ≥ m),如何让碳纳米管底部圆周的中心始终位于原点处等。觉得有用就点个“在看”吧~


本期教程到此结束,感谢收看!


更多精彩内容等你来学👇

【往期教程推荐】

碳布模型还能这么玩

一个百变的切口球壳

打造一根如意碳纳米管


【专辑推荐】
C4D科研绘图系列教程
3D科研绘图往期教程精选
C4D科研模型100例

Diamond系列教程


思斐迩(Sphere)——沟通科学与艺术的桥梁

我们的设计队伍是一支专业的硕博团队,具有深厚的科研底蕴,致力于为广大科研工作者提供最周到的科研图像设计服务。客户遍布全球,包括MIT、Stanford、Cornell、中科院、清华、北大等高校和科研机构,蜚声海内外。作品被CNS、JACS、Chem等期刊选作封面,并受邀为其制作科普动画。更有国内最大的科研作图教学公众号“3D科研绘图”,曾为浙江大学、复旦大学、武汉大学、中科院大连化物所等单位提供专业作图讲座和培训,线上线下总受众数超十万人。
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/71312
 
1015 次点击