Форум программистов, компьютерный форум, киберфорум
JavaScript: HTML5 Canvas
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
1 / 1 / 0
Регистрация: 20.11.2017
Сообщений: 43

Круг из треугольников

21.05.2018, 20:40. Показов 2094. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно чтобы данный треугольник образовывал круг по определённому радиусу и чтобы каждый последующий был разного цвета.
Вот код:
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<!DOCTYPE html>
 
<html>
 
 
<body>
 
<canvas id="myCanvas" width="700" height="600" class="canvas" style="border:1px solid #000000;">
    Your browser does not support the canvas element.
</canvas>
<script> 
    var c = document.getElementById("myCanvas");    //Холст
    var context = c.getContext("2d");           //Его содержимое
    
var X0=300; Y0=300;
var r=120;
var N=12;
var fi=Math.PI/8 ;  
 
var i=1;
ris();
 
function ris()
{ c.width=c.width;
var color = '#' + Math.random().toString(16).substr(-6); // Рандомный цвет
 
    context.beginPath() // beginPath нужен, иначе все линии раскрашиваются
    context.lineWidth = 4;
    context.strokeStyle = color;
 context.moveTo(X0,Y0);
context.lineTo(X0+r*Math.cos(fi*i),Y0-r*Math.sin(fi*i));
context.moveTo(X0+r*Math.cos(fi*i),Y0-r*Math.sin(fi*i));
context.lineTo(X0+r*Math.cos(fi*(i+1)),Y0-r*Math.sin(fi*(i+1)));
context.moveTo(X0+r*Math.cos(fi*(i+1)),Y0-r*Math.sin(fi*(i+1)));
context.lineTo(X0,Y0);
context.stroke();
r -= 1; // уменьшается радиус - линия становится короче
 }
 function NextStep()
{
i++;
ris();                              
}
</script>
 
<input type = "button" class="control" name = "createAnten" value="Далее" onclick="NextStep();" />
 
 
</body>
</html>
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.05.2018, 20:40
Ответы с готовыми решениями:

Докажите, что из всех треугольников, вписанных в данный круг, наибольшая площадь у равностороннего треугольника
Докажите, что из всех треугольников, вписанных в данный круг, наибольшая площадь у равностороннего треугольника

Вычислить площади двух треугольников, и определить, какой из треугольников имеет большую площадь
Два треугольника заданные координатами своих вершин a, b, c. Вычислить площади треугольников, используя формулы Герона, и определить, какой...

Заданы координаты вершин трех треугольников.Определить сколько треугольников лежит внутри окружности
Заданы координаты вершин трех треугольников. Определить сколько треугольников лежит внутри окружности радиусом R с центром в начале...

15
 Аватар для clecar
9 / 9 / 3
Регистрация: 16.02.2018
Сообщений: 29
22.05.2018, 00:32
Чтобы получился круг из кода нужно убрать c.width=c.width; очистку полотна и r -= 1 зачем укорачивать линию, круг не получится. А для заливки цветом треугольников советую взять и переделать под себя мою функцию заливки из программы
http://clecar.ru/risovalki/raskraska/ris.html
Функция находится в папке risyem в файле canva.js function zaliv()
0
1 / 1 / 0
Регистрация: 20.11.2017
Сообщений: 43
22.05.2018, 08:41  [ТС]
А как сделать,чтобы он крутился не вокруг одной точки, а по кругу
0
 Аватар для clecar
9 / 9 / 3
Регистрация: 16.02.2018
Сообщений: 29
22.05.2018, 11:55
Цитата Сообщение от 2zick Посмотреть сообщение
А как сделать,чтобы он крутился не вокруг одной точки, а по кругу
Создать массив координат точек круга. Только треугольники при этом невозможно нарисовать вплотную. Если устроит трапеция, то просто по центру нарисовать круг.
0
1 / 1 / 0
Регистрация: 20.11.2017
Сообщений: 43
22.05.2018, 18:01  [ТС]
Ну мне не надо чтобы они были вплотную

Добавлено через 18 минут
Надо, чтобы они были на определённом радиусе от центра, но чтобы круг не был виден
0
 Аватар для clecar
9 / 9 / 3
Регистрация: 16.02.2018
Сообщений: 29
22.05.2018, 18:18
А что мешает круг сделать по фону.
0
1 / 1 / 0
Регистрация: 20.11.2017
Сообщений: 43
22.05.2018, 20:18  [ТС]
Я уже пытался, но у меня прога после изменений не выдаёт ни треугольников, ни круга
0
 Аватар для clecar
9 / 9 / 3
Регистрация: 16.02.2018
Сообщений: 29
23.05.2018, 02:13
Цитата Сообщение от 2zick Посмотреть сообщение
Я уже пытался, но у меня прога после изменений не выдаёт ни треугольников, ни круга
Покажи.
0
1 / 1 / 0
Регистрация: 20.11.2017
Сообщений: 43
23.05.2018, 12:56  [ТС]
Всё, что пытался, я убирал и приводил к исходному коду, чтобы хоть что-то было
0
 Аватар для clecar
9 / 9 / 3
Регистрация: 16.02.2018
Сообщений: 29
24.05.2018, 01:01
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<html><head></head>
<body>
<canvas id="myCanvas" width="700" height="600" class="canvas" style="border:1px solid #000000;">
Your browser does not support the canvas element.
</canvas>
<script> 
var c = document.getElementById("myCanvas"); //Холст
var context = c.getContext("2d"); //Его содержимое
var X0=300; Y0=300;
var r=120;
var N=12;
var fi=Math.PI/8 ; 
var i=1;
ris();
function ris()
{ 
var color = '#' + Math.random().toString(16).substr(-6); // Рандомный цвет
var kryg=60;
context.beginPath() // beginPath нужен, иначе все линии раскрашиваются
context.lineWidth = 4;
context.strokeStyle = color;
context.fillStyle =color;
context.moveTo(X0,Y0);
context.lineTo(X0+r*Math.cos(fi*i),Y0-r*Math.sin(fi*i));
context.moveTo(X0+r*Math.cos(fi*i),Y0-r*Math.sin(fi*i));
context.lineTo(X0+r*Math.cos(fi*(i+1)),Y0-r*Math.sin(fi*(i+1)));
context.moveTo(X0+r*Math.cos(fi*(i+1)),Y0-r*Math.sin(fi*(i+1)));
context.lineTo(X0,Y0);
context.moveTo(X0+kryg*Math.cos(fi*i),Y0-kryg*Math.sin(fi*i));
context.lineTo(X0+r*Math.cos(fi*(i+1)),Y0-r*Math.sin(fi*(i+1)));//диогональ трапеции
context.moveTo(X0+kryg*Math.cos(fi*i),Y0-kryg*Math.sin(fi*i));
context.lineTo(X0+kryg*Math.cos(fi*(i+1)),Y0-kryg*Math.sin(fi*(i+1)));;//нижняя линия трапеции
context.fillStyle = '#fff';
context.stroke();
context.beginPath(); 
context.arc(X0,Y0, kryg-2, 0, Math.PI*2, false);//круг по центру 
context.closePath(); 
context.fill(); 
}
function NextStep()
{
i++;
ris(); 
}
</script>
<input type = "button" class="control" name = "createAnten" value="Далее" onclick="NextStep();" />
</body>
</html>
Добавлено через 4 часа 1 минуту
Ещё одно решение.
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<html><head></head>
<body>
<canvas id="myCanvas" width="700" height="600" class="canvas" style="border:1px solid #000000;">
Your browser does not support the canvas element.
</canvas>
<script> 
var c = document.getElementById("myCanvas"); //Холст
var context = c.getContext("2d"); //Его содержимое
var X0=300; Y0=300;
var r=120;
var N=12;
var fi=Math.PI/8 ; 
var i=1;
ris();
function ris()
{ 
var color = '#' + Math.random().toString(16).substr(-6); // Рандомный цвет
var kryg=20;
context.beginPath() // beginPath нужен, иначе все линии раскрашиваются
context.lineWidth = 4;
context.strokeStyle = color;
for(n=0,m=0.92;n<m; n+=0.01){
context.moveTo(X0,Y0);
context.lineTo(X0+r*Math.cos(fi*(i+n)),Y0-r*Math.sin(fi*(i+n)));}
context.fillStyle = '#fff';
context.stroke();
context.beginPath(); 
context.arc(X0,Y0, kryg-2, 0, Math.PI*2, false);//круг по центру 
context.closePath(); 
context.fill(); 
}
function NextStep()
{
i++;
ris(); 
}
</script>
<input type = "button" class="control" name = "createAnten" value="Далее" onclick="NextStep();" />
</body>
</html>
0
 Аватар для clecar
9 / 9 / 3
Регистрация: 16.02.2018
Сообщений: 29
25.05.2018, 07:27
Для рисования шестерёнки или солнышка может пригодиться.
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<html><head></head>
<body>
<canvas id="myCanvas" width="700" height="600" style="border:1px solid #000000;">
Your browser does not support the canvas element.
</canvas>
<script> 
var c = document.getElementById("myCanvas"); 
var context = c.getContext("2d"); 
var X0=300; Y0=300;
var r=200;//наружный радиус
var kryg=150;//внутренний радиус
var fi=Math.PI/8 ; //количество треугольников fi*2 в одну сторону и такое же количество в другую
var i=1;
ris();
function ris(){ 
var color = '#' + Math.random().toString(16).substr(-6);
var color2 = '#' + Math.random().toString(16).substr(-6);
context.lineWidth = 1;
for(n=0,m=1;n<m; n+=0.01){
//треугольники вершинами к ценру
context.beginPath();context.strokeStyle = color;
context.moveTo(X0+kryg*Math.cos(fi*(i+0.5)),Y0-kryg*Math.sin(fi*(i+0.5)));
context.lineTo(X0+r*Math.cos(fi*(i+n)),Y0-r*Math.sin(fi*(i+n)));
context.closePath();
context.stroke();
//треугольники вершинами к периметру
context.beginPath()
context.strokeStyle = color2;
context.moveTo(X0+r*Math.cos(fi*(i+0)),Y0-r*Math.sin(fi*(i+0)));
context.lineTo(X0+kryg*Math.cos(fi*(i-0.5+n)),Y0-kryg*Math.sin(fi*(i-0.5+n)));context.closePath();
context.stroke();}}
</script>
<input type = "button" class="control" name = "createAnten" value="Далее" onclick=" i++; ris(); " />
</body>
</html>
Добавлено через 2 часа 13 минут
Насчёт количества наврал это делитель нужно умножать на 2. fi это и есть количество треугольников.
0
1 / 1 / 0
Регистрация: 20.11.2017
Сообщений: 43
29.05.2018, 14:01  [ТС]
А как сделать, чтобы следующие рисунки были независимы от предыдущих?
0
 Аватар для clecar
9 / 9 / 3
Регистрация: 16.02.2018
Сообщений: 29
01.06.2018, 06:18
Они же не зависимы, каждый треугольник вырисовывается отдельно и состоит из самостоятельных отдельных линий.
0
1 / 1 / 0
Регистрация: 20.11.2017
Сообщений: 43
04.06.2018, 07:38  [ТС]
Я имею ввиду чтобы линии каждой последующей фигуры не касались предыдущую
0
 Аватар для clecar
9 / 9 / 3
Регистрация: 16.02.2018
Сообщений: 29
04.06.2018, 13:54
2zick, А что мешает это сделать. Посмотри тему анимация шестерёнки. Не рисуй крайние линии.

Добавлено через 3 часа 14 минут
В 19 строке for(n=0.1,m=0.9;n<m; n+=0.01)
0
1 / 1 / 0
Регистрация: 20.11.2017
Сообщений: 43
13.06.2018, 15:11  [ТС]
Как сделать так, чтобы треугольники была разных цветов?
Вот код:
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<!DOCTYPE html>
 
<html>
 
 
<body>
 
<canvas id="myCanvas" width="600" height="600" class="canvas" style="border:1px solid #000000;">
    Your browser does not support the canvas element.
</canvas>
 
<script> 
    var c = document.getElementById("myCanvas");    
    var context = c.getContext("2d");           
    
X0=300; Y0=300;
 
 
r1=300;f1=Math.PI/7;
r2=100;f2=Math.PI/11;
r3=150;f3=Math.PI/13;
 
 
var ss=Math.PI/6;  
 
var i=0;
ris();
 
function ris()
{
 
X1=X0+r1*(Math.cos(ss*i+f1));
Y1=Y0+r1*(Math.sin(ss*i+f1));
X2=X0+r2*(Math.cos(ss*i+f2));
Y2=Y0+r2*(Math.sin(ss*i+f2));
X3=X0+r3*(Math.cos(ss*i+f3));
Y3=Y0+r3*(Math.sin(ss*i+f3));
 
 
context.moveTo(X1,Y1);
context.lineTo(X2,Y2);
context.lineTo(X3,Y3);
context.lineTo(X1,Y1);
context.lineWidth=4;
context.strokestyle = "000000";
context.stroke();
}
 
function NextStep()
{
i++;
ris();                              
}
</script>
 
<input type = "button" class="control" name = "createAnten" value="Далее" onclick="NextStep();" />
 
 
</body>
</html>
Добавлено через 6 минут
Как сделать, чтобы каждый следующий треугольник был другого цвета?
вот код:
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<!DOCTYPE html>
 
<html>
 
 
<body>
 
<canvas id="myCanvas" width="600" height="600" class="canvas" style="border:1px solid #000000;">
    Your browser does not support the canvas element.
</canvas>
 
<script> 
    var c = document.getElementById("myCanvas");    
    var context = c.getContext("2d");           
    
X0=300; Y0=300;
 
 
r1=300;f1=Math.PI/7;
r2=100;f2=Math.PI/11;
r3=150;f3=Math.PI/13;
 
 
var ss=Math.PI/3;  
 
var i=0;
ris();
 
function ris()
{
 
X1=X0+r1*(Math.cos(ss*i+f1));
Y1=Y0+r1*(Math.sin(ss*i+f1));
X2=X0+r2*(Math.cos(ss*i+f2));
Y2=Y0+r2*(Math.sin(ss*i+f2));
X3=X0+r3*(Math.cos(ss*i+f3));
Y3=Y0+r3*(Math.sin(ss*i+f3));
 
 
context.moveTo(X1,Y1);
context.lineTo(X2,Y2);
context.lineTo(X3,Y3);
context.lineTo(X1,Y1);
context.lineWidth=4;
context.strokestyle = "000000";
context.stroke();
}
 
function NextStep()
{
i++;
ris();                              
}
</script>
 
<input type = "button" class="control" name = "createAnten" value="Далее" onclick="NextStep();" />
 
 
</body>
</html>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.06.2018, 15:11
Помогаю со студенческими работами здесь

Получить файл F2, в котором представлены координаты вершин треугольников и поле для треугольников разных типов
Задача: Написать программу, которая записывает координаты вершин треугольника, вводимых с клавиатуры, в файл F1. Из файла F1 получить файл...

Дано н прямоугольных треугольников с а и б катетами, причем а + б = 9. Составить программу, которая вычисляет суммарную площадь этих треугольников
Дано н прямоугольных треугольников с а и б катетами, причем а + б = 9. Составить программу, которая вычисляет суммарную площадь этих...

Даны круг и полоса. Нужно выяснить, лежит ли круг в этой полосе
Даны круг и полоса. Нужно выяснить, лежит ли круг в этой полосе. Input Со стандартного устройства ввода вводится через пробел 4 целых...

Найти вероятность того, что точка, наудачу брошенная в большой круг, попадет также и в малый круг
В круг радиуса R помещен меньший круг радиуса r. Найти вероятность того, что точка, наудачу брошенная в большой круг, попадет также и в...

Найти функцию, отображающую круг конформно на круг
Найти функцию w(z), отображающую круг |z-2|&lt;2 конформно на круг |w-1|&lt;3 и удовлетворяющую условиям: w(0)=1+3i , w(1) = 1.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru