Показать сообщение отдельно
  #17 (permalink)  
Старый 24.12.2021, 20:34
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,717

Сообщение от Teamur
Там радианы меняются, а надо как-то получать координаты вершин
Так они не произвольно меняются, а все время на один и тот же угол.
Синусы косинусы достаточно один раз вычислить

<body>
<label>Количество вершин: <input id="nu" type="number" min="3" value=3></label>
<button id="p2">Построить</button>
<br>
<svg width="410" height="410" version="1.1" xmlns="http://www.w3.org/2000/svg">
<circle cx="205" cy="205" r="200" stroke="black" fill="transparent" stroke-width="1"/>
<polygon id="mnog" stroke="red" fill="transparent" stroke-width="1"/>
</svg>
<script>
const cx = 205
const cy = 205
const R = 200;

const draw = (mnog) =>	document.getElementById('mnog').setAttribute('points', mnog.flat())


const mnogoug = (n) => {
	const a = Math.PI*2/n;
	const sa = Math.sin(a)
	const ca = Math.cos(a)
	let sc = 0.;
	let cc = 1.;
	const mnog = []
	for (let i=0; i< n; i++) {
		mnog.push([R*cc+cx, R*sc+cy])
		let tsc = sc;
		sc = sc*ca+cc*sa;
		cc = cc*ca-tsc*sa;
	}
	return mnog
}

document.getElementById('p2').addEventListener('click', () => {
	const n = document.getElementById('nu').valueAsNumber;
	mnog = mnogoug(n)
	draw(mnog)
})
</script>
</body>
Ответить с цитированием