<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Электронный научно-практический журнал «Современные научные исследования и инновации» &#187; кривая Безье</title>
	<atom:link href="http://web.snauka.ru/issues/tag/krivaya-beze/feed" rel="self" type="application/rss+xml" />
	<link>https://web.snauka.ru</link>
	<description></description>
	<lastBuildDate>Sat, 18 Apr 2026 09:41:14 +0000</lastBuildDate>
	<language>ru</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Моделирование вазы с использованием кривых Безье в среде Three.js</title>
		<link>https://web.snauka.ru/issues/2025/12/104047</link>
		<comments>https://web.snauka.ru/issues/2025/12/104047#comments</comments>
		<pubDate>Tue, 30 Dec 2025 12:07:35 +0000</pubDate>
		<dc:creator>Давлетзянов Демид Владимирович</dc:creator>
				<category><![CDATA[05.00.00 ТЕХНИЧЕСКИЕ НАУКИ]]></category>
		<category><![CDATA[three.js]]></category>
		<category><![CDATA[WebGL]]></category>
		<category><![CDATA[кривая Безье]]></category>
		<category><![CDATA[моделирование]]></category>
		<category><![CDATA[объект вращения]]></category>
		<category><![CDATA[трехмерная графика]]></category>

		<guid isPermaLink="false">https://web.snauka.ru/issues/2025/12/104047</guid>
		<description><![CDATA[Научный руководитель: Вильданов Алмаз Нафкатович к.ф.-м.н., Уфимский университет науки и технологий, Нефтекамский филиал Современные веб-технологии позволяют реализовывать сложные трёхмерные сцены непосредственно в браузере без использования специализированного программного обеспечения. Одной из наиболее популярных библиотек для работы с WebGL является three.js, предоставляющая удобный интерфейс для создания и визуализации трёхмерных объектов. Одним из распространённых способов моделирования тел вращения является использование [...]]]></description>
			<content:encoded><![CDATA[<p align="center"><em>Научный руководитель:</em><em> </em><em>Вильданов Алмаз Нафкатович<br />
</em><em><em>к.ф.-м.н.,</em></em><em> </em><em>Уфимский университет науки и технологий, Нефтекамский филиал</em></p>
<p>Современные веб-технологии позволяют реализовывать сложные трёхмерные сцены непосредственно в браузере без использования специализированного программного обеспечения. Одной из наиболее популярных библиотек для работы с WebGL является three.js, предоставляющая удобный интерфейс для создания и визуализации трёхмерных объектов.</p>
<p>Одним из распространённых способов моделирования тел вращения является использование кривых Безье для задания двумерного профиля с последующим вращением вокруг оси. Данный метод широко применяется в компьютерной графике при создании сосудов, ваз и других симметричных объектов.</p>
<p>Целью данной работы является разработка и описание алгоритма построения трёхмерной модели кувшина на основе кубической кривой Безье в среде three.js.</p>
<p><strong>Теоретические основы. </strong>Кривые Безье представляют собой параметрические кривые, широко применяемые в компьютерной графике и системах автоматизированного проектирования. Кубическая кривая Безье определяется четырьмя контрольными точками и описывается параметрическим уравнением:</p>
<p><img title="formula" src="https://web.snauka.ru/wp-content/uploads/2025/12/formula.png" alt="" width="732" height="48" /></p>
<p>где <em><strong>P<sub>0</sub></strong></em>, <em><strong>P<sub>1</sub></strong></em>, <em><strong>P<sub>2</sub></strong></em>, <em><strong>P<sub>3</sub></strong></em>, - контрольные точки кривой.</p>
<p><strong>Метод вращения профиля. </strong>Для получения трёхмерного объекта профиль, заданный набором точек в двумерном пространстве, вращается вокруг оси симметрии. В three.js данный метод реализован с помощью класса LatheGeometry, который автоматически формирует сетку вершин на основе массива точек и количества сегментов вращения.<br />
<strong></strong></p>
<p><strong>Описание реализации.</strong> Программная реализация выполнена на языке JavaScript с использованием библиотеки three.js. На первом этапе создаётся сцена, камера и рендерер. Камера типа PerspectiveCamera обеспечивает перспективное отображение объекта.     Для формирования профиля кувшина используется кубическая кривая Безье (THREE.CubicBezierCurve), контрольные точки которой масштабируются для получения требуемых размеров объекта. На основе вычисленных точек кривой создаётся геометрия вращения (THREE.LatheGeometry).</p>
<p>Для повышения реалистичности визуализации применяются два источника света: рассеянный (AmbientLight) и направленный (DirectionalLight). Также используются два материала — для внешней и внутренней поверхностей объекта, что позволяет корректно отображать модель при вращении камеры.</p>
<p>Интерактивное управление сценой реализовано с помощью модуля OrbitControls, обеспечивающего вращение, масштабирование и плавное перемещение камеры.</p>
<p>Ниже приведен HTML код программы:</p>
<p>&lt;!DOCTYPE html&gt;</p>
<p>&lt;html lang=&#8221;ru&#8221;&gt;</p>
<p>&lt;head&gt;</p>
<p style="padding-left: 30px;">    &lt;title&gt;three.js — Кувшин, созданный с помощью кривой Безье&lt;/title&gt;</p>
<p style="padding-left: 30px;">    &lt;meta charset=&#8221;utf-8&#8243;&gt;</p>
<p style="padding-left: 30px;">    &lt;meta name=&#8221;viewport&#8221; content=&#8221;width=device-width, initial-scale=1.0&#8243;&gt;</p>
<p>&lt;/head&gt;</p>
<p>&lt;body&gt;</p>
<p>&lt;div id=&#8221;info&#8221;&gt;Кувшин, созданный с помощью кривой Безье&lt;/div&gt;</p>
<p>&lt;script src=&#8221;https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js&#8221;&gt;&lt;/script&gt;</p>
<p>&lt;script src=&#8221;https://cdn.jsdelivr.net/npm/three@0.128.0/examples/js/controls/OrbitControls.min.js&#8221;&gt;&lt;/script&gt;</p>
<p>&lt;script&gt;</p>
<p style="padding-left: 30px;">    var camera, scene, renderer;</p>
<p style="padding-left: 30px;">    var controls;</p>
<p style="padding-left: 30px;">    init();</p>
<p style="padding-left: 30px;">    animate();</p>
<p style="padding-left: 30px;">    function init() {</p>
<p style="padding-left: 60px;">        scene = new THREE.Scene();</p>
<p style="padding-left: 60px;">        scene.background = new THREE.Color(0xf0f0f0);</p>
<p style="padding-left: 60px;">        camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 1000);</p>
<p style="padding-left: 60px;">        camera.position.set(0, 0, 100);</p>
<p style="padding-left: 60px;">        renderer = new THREE.WebGLRenderer({antialias: true});</p>
<p style="padding-left: 60px;">        renderer.setSize(window.innerWidth, window.innerHeight);</p>
<p style="padding-left: 60px;">        document.body.appendChild(renderer.domElement);</p>
<p style="padding-left: 60px;">        var ambientLight = new THREE.AmbientLight(0xffffff, 0.6);</p>
<p style="padding-left: 60px;">        scene.add(ambientLight);</p>
<p style="padding-left: 60px;">        var directionalLight = new THREE.DirectionalLight(0xffffff, 0.8);</p>
<p style="padding-left: 60px;">        directionalLight.position.set(1, 1, 1);</p>
<p style="padding-left: 60px;">        scene.add(directionalLight);</p>
<p style="padding-left: 60px;">        createVase();</p>
<p style="padding-left: 60px;">        controls = new THREE.OrbitControls(camera, renderer.domElement);</p>
<p style="padding-left: 60px;">        controls.enableDamping = true;</p>
<p style="padding-left: 60px;">        controls.dampingFactor = 0.05;</p>
<p style="padding-left: 60px;">        window.addEventListener(&#8216;resize&#8217;, onWindowResize, false);</p>
<p style="padding-left: 30px;">    }</p>
<p style="padding-left: 30px;">    function createVase() {</p>
<p style="padding-left: 60px;">        var group = new THREE.Group();</p>
<p style="padding-left: 60px;">        const scale = 10;</p>
<p style="padding-left: 60px;">        const curve = new THREE.CubicBezierCurve(</p>
<p style="padding-left: 90px;">            new THREE.Vector2(3, 0).multiplyScalar(scale),</p>
<p style="padding-left: 90px;">            new THREE.Vector2(12, 6).multiplyScalar(scale),</p>
<p style="padding-left: 90px;">            new THREE.Vector2(-3, 12).multiplyScalar(scale),</p>
<p style="padding-left: 90px;">            new THREE.Vector2(7, 15).multiplyScalar(scale)</p>
<p style="padding-left: 60px;">        );</p>
<p style="padding-left: 60px;">        const points = curve.getPoints(36);</p>
<p style="padding-left: 60px;">        var geometry = new THREE.LatheGeometry(points, 64);</p>
<p style="padding-left: 60px;">        var material1 = new THREE.MeshPhongMaterial({color: 0xfff000});</p>
<p style="padding-left: 60px;">        var material2 = new THREE.MeshPhongMaterial({color: 0xfff080, side: THREE.BackSide});</p>
<p style="padding-left: 60px;">        var object1 = new THREE.Mesh(geometry, material1);</p>
<p style="padding-left: 60px;">        var object2 = new THREE.Mesh(geometry, material2);</p>
<p style="padding-left: 60px;">        group.add(object1);</p>
<p style="padding-left: 60px;">        group.add(object2);</p>
<p style="padding-left: 60px;">        scene.add(group);</p>
<p style="padding-left: 30px;">    }</p>
<p style="padding-left: 30px;">    function onWindowResize() {</p>
<p style="padding-left: 60px;">        camera.aspect = window.innerWidth / window.innerHeight;</p>
<p style="padding-left: 60px;">        camera.updateProjectionMatrix();</p>
<p style="padding-left: 60px;">        renderer.setSize(window.innerWidth, window.innerHeight);</p>
<p style="padding-left: 30px;">    }</p>
<p style="padding-left: 30px;">    function animate() {</p>
<p style="padding-left: 60px;">        requestAnimationFrame(animate);</p>
<p style="padding-left: 60px;">        controls.update();</p>
<p style="padding-left: 60px;">        renderer.render(scene, camera);</p>
<p style="padding-left: 30px;">    }</p>
<p>&lt;/script&gt;</p>
<p>&lt;/body&gt;</p>
<p>&lt;/html&gt;<br />
В результате выполнения программы формируется интерактивная трёхмерная модель кувшина, корректно отображаемая в браузере. Пользователь имеет возможность вращать объект, изменять масштаб и рассматривать его под различными углами. Применение кривых Безье позволяет гибко управлять формой модели, изменяя лишь положение контрольных точек.</p>
<p style="text-align: center; background: white;"><img src="https://web.snauka.ru/wp-content/uploads/2025/12/123025_1159_11.png" alt="" /><span style="color: #111111; georgia; 13pt; background-color: yellow;"><br />
</span></p>
<p style="text-align: center; background: white;"><span style="color: #111111;">Рисунок 1. Интерактивная трёхмерная модель вазы<br />
</span></p>
<p style="text-align: justify; background: white;"><span style="color: #111111;"><strong>Заключение</strong></span></p>
<p style="text-align: justify; background: white;">В работе был рассмотрен метод построения трёхмерного объекта вращения на основе кубической кривой Безье с использованием библиотеки three.js. Показано, что данный подход является наглядным, универсальным и удобным для веб-разработки. Разработанное решение может быть расширено за счёт добавления текстур, анимации и более сложных кривых профиля.</p>
]]></content:encoded>
			<wfw:commentRss>https://web.snauka.ru/issues/2025/12/104047/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
