【发布时间】:2017-03-07 15:07:50
【问题描述】:
谁能帮我理解如何制作一个正确的正多边形(这个数字必须有20个角度)
我在这里迈出了第一步http://codepen.io/anon/pen/MpbeLB
(抱歉这段代码。stackoverflow 不支持 SCSS)
我使用这个公式http://ru.wikipedia.org/wiki/Правильный_многоугольник 来查找正多边形的顶部。
$colorBackground: #121d1e;
$colorC: #ace9ae;
$colorW: #fff;
$h: 600px;
$w: $h /0.75;
@mixin br($radius) {
-webkit-border-radius: $radius;
-moz-border-radius: $radius;
-ms-border-radius: $radius;
border-radius: $radius;
}
@mixin br50 {
-webkit-border-radius: 50%;
-moz-border-radius: 50%;
-ms-border-radius: 50%;
border-radius: 50%;
}
@function pi() {
@return 3.14159265359;
}
@function pow($number, $exp) {
$value: 1;
@if $exp > 0 {
@for $i from 1 through $exp {
$value: $value * $number;
}
} @else if $exp < 0 {
@for $i from 1 through -$exp {
$value: $value / $number;
}
}
@return $value;
}
@function fact($number) {
$value: 1;
@if $number > 0 {
@for $i from 1 through $number {
$value: $value * $i;
}
}
@return $value;
}
@function rad($angle) {
$unitless: $angle / ($angle * 0 + 1);
$unitless: $unitless / 180 * pi();
@return $unitless;
}
@function sin($angle) {
$sin: 0;
$angle: rad($angle);
// Iterate a bunch of times.
@for $i from 0 through 10 {
$sin: $sin + pow(-1, $i) * pow($angle, (2 * $i + 1)) / fact(2 * $i + 1);
}
@return $sin;
}
@function cos($angle) {
$cos: 0;
$angle: rad($angle);
// Iterate a bunch of times.
@for $i from 0 through 10 {
$cos: $cos + pow(-1, $i) * pow($angle, 2 * $i) / fact(2 * $i);
}
@return $cos;
}
@function tan($angle) {
@return sin($angle) / cos($angle);
}
.mainBlock {
position: relative;
display: inline-block;
width: $w;
height: $h;
border: 1px solid #f00;
}
.centralCircle {
position: absolute;
top: 50%;
left: 50%;
margin-top: (-$h*0.1);
margin-left: (-$h*0.1);
width: $h *0.2;
height: $h * 0.2;
background-color: $colorC;
@include br50;
animation: centralWrapperMove 1s ease-in infinite alternate;
}
@keyframes centralDotMove {
0% {
transform: scale(1);
transform-origin: center center;
}
100% {
transform: scale(0);
transform-origin: center center;
}
}
@keyframes centralWrapperMove {
0% {
transform: scale(1);
transform-origin: center center;
}
100% {
transform: scale(0.2);
transform-origin: center center;
}
}
$workW: $w;
$workH: ($h/0.75);
$maxScale: 0.03;
$borderScale: 0.2;
$workerHeight: $workH*$maxScale;
$workerWidth: $workW*$maxScale;
.workerCircle {
position: absolute;
top: 50%;
left: 50%;
width: $workerWidth;
height: $workerHeight;
margin: (-$workH*$maxScale/2) 0 0 (-$workW*$maxScale/2);
@include br50;
border: ($workerWidth*$borderScale) solid red;
z-index: 2;
$n: 20;
$r: 180px;
$mygrad: 18; /// angels
$fi: (pi())/2;
@for $i from 1 through 20 {
&:nth-of-type(#{$i}) {
$j: ($i - 1);
transform: translate(($r* cos(($mygrad*$j)+ ( (2*pi()*$j)/$n))), ($r* sin(($mygrad*$j)+ ((2*pi()*$j)/$n))));
/// This formula works wrong
}
}
.workerDot {
position: absolute;
top: 50%;
left: 50%;
width: $workerWidth/4;
height: $workerHeight/4;
margin: (-$workerWidth/8) 0 0 (-$workerHeight/8);
@include br50;
background: #fff;
}
}
.wrappen {
position: relative;
width: 100%;
height: 100%;
margin: 0;
padding: 0;
}
<div class="mainBlock">
<div class="workerCircle"></div>
<div class="workerCircle"></div>
<div class="workerCircle"></div>
<div class="workerCircle"></div>
<div class="workerCircle"></div>
<div class="workerCircle"></div>
<div class="workerCircle"></div>
<div class="workerCircle"></div>
<div class="workerCircle"></div>
<div class="workerCircle"></div>
<div class="workerCircle"></div>
<div class="workerCircle"></div>
<div class="workerCircle"></div>
<div class="workerCircle"></div>
<div class="workerCircle"></div>
<div class="workerCircle"></div>
<div class="workerCircle"></div>
<div class="workerCircle"></div>
<div class="workerCircle"></div>
<div class="workerCircle"></div>
</div>
【问题讨论】:
-
我修复了代码。这样更好吗?
-
您可以将您的 SCSS 转换为 CSS 并在此处添加,以便进行工作演示。您能否更好地解释您的问题,以及图像(您希望在输出中获得的内容)。
-
我想在 SCSS 上得到正确的公式。这个公式应该绘制正多边形(20个角)这个角的顶部应该是圆的中心。