迷你世界足球怎么画(使用CSS画出3D足球)
更新时间:2022-10-10 17:36:34之前一直想过用CSS做一个3D足球,前几天使用CSS画地球之后,突然就来了灵感。使用相同的思路来完成3D足球,没有看过请参考一下之前的文字《css-画一个3D地球 》
先看效果:
需求分析:
足球是由12个五边形和20个六边形缝合而成。
首先,我们需要准备边长相同的五边形和六边形。
css画多边形的方式很多,这里我考虑到后期偏移的时候需要确定多边形重心的位置。
使用css的clip-path:polygon属性来完成多边形。首先我们画出六边形和五边形的外切圆,来确定外层div的尺寸。
暂定多边形边长为100:则可以算出,六边形外层div宽度为200;五边形外层div为170。
并且计算出多边形的每个顶点,在外切圆上的位置。(发挥你初中水平的时候到了)
.polygon {
border-radius: 50%;
}
.polygon::after {
position: relative;
content: '';
display: block;
width: 100%;
height: 100%;
}
.polygon6 {
width: 200px;
height: 200px;
background: rgba(255, 0, 0, .6);
}
.polygon6::after {
background: #FFF;
clip-path: polygon(0 50%, 25% 6.7%, 75% 6.7%, 100% 50%, 75% 93.3%, 25% 93.3%);
}
.polygon5 {
width: 170px;
height: 170px;
background: rgba(0, 255, 0, .6);
}
.polygon5::after {
background: #000;
clip-path: polygon(50% 0, 97.55% 34.55%, 79.39% 90.45%, 20.6% 90.45%, 2.45% 34.55%);
}
第二步:我们需要将按规律将五边形和六边形贴到球形的表面
首先,我们要先算出来球的半径,在足球赤道上,其实是10个六边形的五条边和五条中线的连线。
我们大致推算出足球的赤道周长约为1500(没有计算直线和弧形的误差,此处我们不需要做到如此精细)
以此计算出,球的半径约为235左右。
我们从足球的北极开始到足球的南极,依次排布:1个五边形、5个六边形、5个五边形、5个六边形、5个六边形、5个五边形、5个六边形、1个五边形。
/**
* deg 纬度
* len 图形个数
* className 图形是5边形还是6边形
* Y轴上偏移角度
* Z轴上旋转角度
*/
function draw(deg, len, className, startDeg = 0, rotateDeg = 0) {
var fragment = document.createDocumentFragment()
for (var i = 0; i < len; i ) {
var div = document.createElement('div')
div.className = className
div.style.transform = 'rotateY(' ~~(360 / len * i startDeg) 'deg) rotateX(' deg 'deg) rotateZ(' rotateDeg 'deg) translateZ(238px)'
fragment.appendChild(div)
}
document.querySelector('.box').appendChild(fragment)
}
window.onload = function () {
draw(-90, 1, 'polygon5')
draw(-53, 5, 'polygon6', 36)
draw(-28, 5, 'polygon5', 0, 180)
draw(-11, 5, 'polygon6', 36)
draw(11, 5, 'polygon6')
draw(28, 5, 'polygon5', 36, 0)
draw(53, 5, 'polygon6', 72)
draw(90, 1, 'polygon5')
}
简单加个动画效果,一个3D的足球就完成了。
由于是平面拼接而成,所有效果无法像真实足球那样特别的圆。
不过一个足球的原理基本解释清楚了。后期我在考虑将五边形和六边形继续拆分成更小的图形来让足球更加的圆润。
代码仓库地址:
https://github/shb190802/html5
演示地址:
https://suohb/demo/win/globe3.html
相关推荐
-
迷你世界2020年最新版(迷你世界发展史:2020沙盒游戏的巅峰)
查看详情
-
国贸迷你世界杯(世界杯 东莞篮丨篮球世界杯,东莞准备好了)
查看详情
-
nba哪些人有跑车(NBA亿万富翁开什么豪车?詹皇座驾有钱难买,300斤奥胖塞进迷你车)
查看详情
-
迷你马拉松多少米(迷你马拉松 坚毅少年跑)
查看详情
-
足球场的球门多长(世界杯侃球入门测试,伪球迷你过来,做对10道题秒变懂球帝!)
查看详情
-
中国庭审公开网网易告迷你(一周游闻:又一个百万播放侵权案,网易索赔800万不接受和解)
查看详情
-
小学生测量足球场的方法都有哪些(世界杯侃球入门测试,伪球迷你过来,做对10道题秒变懂球帝!)
查看详情
-
哪些人去过nba试训(美记:勇士今日举办迷你训练营 试训了包括埃文斯在内的多名球员)
查看详情
- 最新资讯
-
- 2022-11-18 电竞宣萱(“吃鸡”呆萌和书生组合果然是无敌,真的是钢枪组合,所向无敌)
- 2022-11-15 实况足球曼联时刻测评(实况足球:曼联传奇——吉格斯测评)
- 2022-11-15 迭戈-科斯塔将在今夏离开马竞(官方:马竞宣布与迭戈-科斯塔解约)
- 2022-11-15 皮克就是罚款大户(皮克狂炸了赛场公开出言讽刺西甲主席 大嘴或被追加停赛)
- 2022-11-15 lol官网(10年前的LOL官网:只有40名英雄,那时候盖伦都还没上线)
- 2022-11-15 巴西对秘鲁角球数(巴西8强战存一大隐患!主力后腰累积黄牌停赛,后防将经受考验)
- 2022-11-15 张效瑞沈祥福能给深足提供帮助(张效瑞确认沈祥福出任深足教练组组长:训练和临场指挥均由他负责)
- 2022-11-15 葡萄牙vs乌拉圭首发(出战世界杯稳了!孙准浩替补踢半场长传成功率高 一优势有望获重用)
- 2022-11-15 湖人vs步行者全场回放2020(詹姆斯暴砍39分,湖人队加时124-116击败步行者)
- 2022-11-15 尤文逼和国际米兰(欧洲足坛疯狂一夜:阿森纳巴黎全胜,尤文2-0国米,曼联爆冷输球)
- 推荐攻略
-
-
乌克兰总统身亡(乌总统泽连斯基解除乌总检察长及国家安全局局长职务)
-
足球比赛每个半场多少分钟(足球比赛每半场几分钟)
-
2021中超今天哪里转播(今晚!中超2场对决,CCTV5 直播申花PK武汉,腾讯体育亚泰vs天津)
-
2022梅西坠机身亡事件结果(足坛变天!巴萨无缘榜首的2年:梅西告别,老马去世,2-8惨案)
-
2021全运会篮球直播赛程辽宁(4月22日央视直播:CBA总决赛;赵心童vs马奎尔,塞尔比vs颜丙涛)
-
中国最强导弹(世界洲际导弹前10排名,中国东风导弹领先美国,第一名堪称导弹王)
-
2021篮球比赛在哪里看(CCTV5直播NBA 辽篮争夺CBA总决赛冠军点 颜丙涛出战斯诺克世锦赛)
-
东航结果不敢公布了(民航局再次回应东航MU5735事故调查!查明原因有多难,多久公布?)
-