<span style="font-size:18px;">#
def person():
def cos_(angle):
return math.cos(angle / 180 * math.pi);
def sin_(angle):
return math.sin(angle / 180 * math.pi);
res = [];
height = 1700
#upBody 上身长 -- 指脖底到大腿顶
upBody = round((height*75/160)-300);
#大腿
bigLeg = round((height-300-upBody)*40/85);
#小腿
smallLeg = round(height-300-upBody-bigLeg);
#大臂
bigArm = round((upBody*55/45)*0.6);
#小臂
smallArm = round(bigArm*0.67);
#手掌
halm = 100;
#脚掌
foot = 150;
#旋转,所有旋转都分XY平面角度/YZ平面角度
halm_rot_1 = [0, 60];
halm_rot_2 = [0, 150];
smallArm_rot_1 = [0, 30];
smallArm_rot_2 = [0, 160];
smallArm_rot_3 = [0, 220];
bigArm_rot_1 = [0, 120];
bigArm_rot_2 = [0, 180];
foot_rot_1 = [0, 60];
root_rot_2 = [0, 30];
smallLeg_rot_1 = [0, 160]
bigLeg_rot_1 = [0, 180];
bigLeg_rot_2 = [0, 150];
bigLeg_rot_3 = [0, 90];
#旋转, 左肢角度取正值,右肢脚度取负值
neckRot = 90;
lBigArm = 30; #取值范围 20 -> 160
rBigArm = -30; #取值范围 -20 -> -160
lSmallArm = -10;
rSmallArm = 10;
lBigLeg = 130; #取值范围 -10 -> -120
rBigLeg = -130; #取值范围 10 -> 120
lSmallLeg = -60;
rSmallLeg = 60;
lHalm = 160;
rHalm = -160;
lFoot = 30;
rFoot = -30;
upBodyCurveRate = 0;
neckEndAngle = -90 / 180 * math.pi;
midBodyAngle = -90 / 180 * math.pi;
#长度投影系数
proj_lBigArm = 1 * cos_(60);
proj_lSmallArm = 1 * cos_(60);
proj_lHalm = 1;
proj_rBigArm = 1 * cos_(60);
proj_rSmallArm = 1 * cos_(60);
proj_rHalm = 1;
proj_lBigLeg = 1 * cos_(5);
proj_lSmallLeg = 1 * cos_(30);
proj_lFoot = 1 * cos_(15);
proj_rBigLeg = 1 * cos_(5);
proj_rSmallLeg = 1 * cos_(30);
proj_rFoot = 1 * cos_(15);
#长度
lBigArm_len = round(bigArm * proj_lBigArm);
rBigArm_len = round(bigArm * proj_rBigArm);
lSmallArm_len = round(smallArm * proj_lSmallArm);
rSmallArm_len = round(smallArm * proj_rSmallArm);
lHalm_len = round(halm * proj_lHalm);
rHalm_len = round(halm * proj_rHalm);
lBigLeg_len = round(bigLeg * proj_lBigLeg);
rBigLeg_len = round(bigLeg * proj_rBigLeg);
lSmallLeg_len = round(smallLeg * proj_lSmallLeg);
rSmallLeg_len = round(smallLeg * proj_rSmallLeg);
lFoot_len = round(foot * proj_lFoot);
rFoot_len = round(foot * proj_rFoot);
#四肢路径
a = Sketch();
a.curve(314, -1/100); #曲率半径10cm
a.addAngle(neckRot);
a.curve(100, 0);
a.startAngle = neckEndAngle;
a.addAngle(rBigArm);
a.curve(rBigArm_len);
a.addAngle(rSmallArm);
a.curve(rSmallArm_len);
a.addAngle(rHalm);
a.curve(rHalm_len);
res.append(a.linkPath());
b = Sketch();
b.addAngle(180);
b.curve(314, 1/100); #逆时针半圆
b.addAngle(-180);
b.startAngle = neckEndAngle;
b.curve(100, 0);
b.addAngle(90-neckRot);
b.addAngle(lBigArm);
b.curve(lBigArm_len);
b.addAngle(lSmallArm);
b.curve(lSmallArm_len);
b.addAngle(lHalm);
b.curve(lHalm_len);
res.append(b.linkPath());
c = Sketch();
c.curve(314, -1/100); #曲率半径10cm
c.addAngle(neckRot);
c.curve(100, 0);
c.startAngle = neckEndAngle;
c.curve(upBody, upBodyCurveRate);
c.startAngle = midBodyAngle;
c.addAngle(rBigLeg);
c.curve(rBigLeg_len, 0);
c.addAngle(rSmallLeg);
c.curve(rSmallLeg_len, 0);
c.addAngle(rFoot);
c.curve(rFoot_len);
res.append(c.linkPath());
d = Sketch();
d.curve(314, -1/100); #逆时针半圆
d.addAngle(180); #先转半圈
d.addAngle(neckRot);
d.addAngle(-180); #再退回去
d.curve(100, 0);
d.startAngle = neckEndAngle;
d.curve(upBody, upBodyCurveRate);
d.startAngle = midBodyAngle;
d.addAngle(lBigLeg);
d.curve(lBigLeg_len, 0);
d.addAngle(lSmallLeg);
d.curve(lSmallLeg_len, 0);
d.addAngle(lFoot);
d.curve(lFoot_len);
res.append(d.linkPath());
print(res);
if __name__ == '__main__':
person();
#</span>
本节到此结束,欲知后事如何,请看下回分解。