Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Общие вопросы о Flash (не затрагивающие ActionScript)

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 30.10.2006, 11:35
BigDan вне форума Посмотреть профиль Отправить личное сообщение для BigDan Найти все сообщения от BigDan
  № 1  
Ответить с цитированием
BigDan
 
Аватар для BigDan

Регистрация: Apr 2006
Адрес: Kiev
Сообщений: 1,675
Отправить сообщение для BigDan с помощью ICQ
По умолчанию Стереометрия

Делаю проэкт по математике(по стереометрии) во флеше.Так вот надо построить сечение в равносторонней триугольной пирамиде. Известны кординаты всех четырех вершин. Как зная эти кординаты потроить сечение?

Старый 30.10.2006, 13:33
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Вспомнить школьный курс геометрии.

Старый 30.10.2006, 13:54
BigDan вне форума Посмотреть профиль Отправить личное сообщение для BigDan Найти все сообщения от BigDan
  № 3  
Ответить с цитированием
BigDan
 
Аватар для BigDan

Регистрация: Apr 2006
Адрес: Kiev
Сообщений: 1,675
Отправить сообщение для BigDan с помощью ICQ
Цитата:
Сообщение от __etc
Вспомнить школьный курс геометрии.
Это не решает проблемы. Ведь на бумаге легче строить, чем на компе.

Старый 30.10.2006, 14:15
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 4  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Под школьным курсом я подразумевал формулы для вычисления сечения, а не рисование карандашом по бумаге.

Старый 30.10.2006, 16:46
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 5  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
тут только геометрией не обойдешься =) нужно еще немного алгебры =) Уравнение прямой, например.
ЗЫ. есть 2 способа. Матрицами и графами. Графами я не умею (не пробовал). А матрицами вроде не сложно =)
__________________
Hell is the possibility of sanity

Старый 30.10.2006, 20:33
BigDan вне форума Посмотреть профиль Отправить личное сообщение для BigDan Найти все сообщения от BigDan
  № 6  
Ответить с цитированием
BigDan
 
Аватар для BigDan

Регистрация: Apr 2006
Адрес: Kiev
Сообщений: 1,675
Отправить сообщение для BigDan с помощью ICQ
Если не сложно, то реализацию подкиньте, пожалуйста.

Старый 30.10.2006, 21:41
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 7  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
у Гурского был пример с рисованием кубика в перспективе... кажется...
Код:
/*  */


InitMovie();
InitScene();


/* InitMovie() initializes the global variables in the movie. Takes no parameters. */
function InitMovie() {
	TransformMatrix = [[1,0,0], [0,1,0], [0,0,1], [0,0,0]];
	f = 200;
	moviewidth = 600;
	movieheight = 400;
	lines = 0;
	curves = 0;
	surfaces = 0;
}


/* InitScene() initializes the 3D scene, creating movie clips for each 3D object. Takes no parameters. */
function InitScene() {
	createEmptyMovieClip("Scene", 1);
	Scene._x = moviewidth/2;
	Scene._y = movieheight/2;
	make3Dobj("surface", [[[100,100,50], [100,-100,50], [0,0,50]], [[100,-100,50], [-100,-100,50]], [[-100,-100,50], [-100,100,50], [0,0,50]], [[-100,100,50], [100,100,50]]], 1, "0x000000", 0, "0xff0000", 100);
	make3Dobj("surface", [[[100,100,30], [100,-100,30], [0,0,30]], [[100,-100,30], [-100,-100,30]], [[-100,-100,30], [-100,100,30], [0,0,30]], [[-100,100,30], [100,100,30]]], 1, "0x000000", 0, "0xff9900", 100);
	make3Dobj("surface", [[[100,100,10], [100,-100,10], [0,0,10]], [[100,-100,10], [-100,-100,10]], [[-100,-100,10], [-100,100,10], [0,0,10]], [[-100,100,10], [100,100,10]]], 1, "0x000000", 0, "0xffff00", 100);
	make3Dobj("surface", [[[100,100,-10], [100,-100,-10], [0,0,-10]], [[100,-100,-10], [-100,-100,-10]], [[-100,-100,-10], [-100,100,-10], [0,0,-10]], [[-100,100,-10], [100,100,-10]]], 1, "0x000000", 0, "0x00ff00", 100);
	make3Dobj("surface", [[[100,100,-30], [100,-100,-30], [0,0,-30]], [[100,-100,-30], [-100,-100,-30]], [[-100,-100,-30], [-100,100,-30], [0,0,-30]], [[-100,100,-30], [100,100,-30]]], 1, "0x000000", 0, "0x0000ff", 100);
	make3Dobj("surface", [[[100,100,-50], [100,-100,-50], [0,0,-50]], [[100,-100,-50], [-100,-100,-50]], [[-100,-100,-50], [-100,100,-50], [0,0,-50]], [[-100,100,-50], [100,100,-50]]], 1, "0x000000", 0, "0x660066", 100);
}


/* Create a 3D object using the parameters specified in function call. */
function make3Dobj(objtype, pointarray, lineweight, linecolour, linealpha, fillcolour, fillalpha) {
	obj = Scene.createEmptyMovieClip(objtype + "_" + this[objtype + "s"], lines+curves+surfaces);
	obj.pointarray = pointarray;
	obj.lineweight = lineweight;
	obj.linecolour = linecolour;
	obj.linealpha = linealpha;
	obj.fillcolour = fillcolour;
	obj.fillalpha = fillalpha;
	this[objtype + "s"] ++;
}


/* Render the Scene, loop through all of the 3D objects and draw them using points calculated from transformation matrix. Takes no parameters. */
function RenderScene() {
	i = 0;
	while (i <= lines-1) {
		obj = Scene["line_"+i];
		obj.clear();
		obj.lineStyle(obj.lineweight, obj.linecolour, obj.linealpha);
		point1 = MatrixVectorMultiply(TransformMatrix, obj.pointarray[0]);
		point2 = MatrixVectorMultiply(TransformMatrix, obj.pointarray[1]);
		obj.moveTo(point1[0]/(1-(point1[2]/f)), point1[1]/(1-(point1[2]/f)));
		obj.lineTo(point2[0]/(1-(point2[2]/f)), point2[1]/(1-(point2[2]/f)));
		camdist = Math.sqrt(Math.pow((point1[0]+point2[0])/2,2)+Math.pow((point1[1]+point2[1])/2,2)+Math.pow(f-((point1[2]+point2[2])/2),2));
		obj.swapDepths(Math.pow(f,3)-(Math.floor(camdist*100)));
		i ++;
	}
	i = 0;
	while (i <= curves-1) {
		obj = Scene["curve_"+i];
		obj.clear();
		obj.lineStyle(obj.lineweight, obj.linecolour, obj.linealpha);
		point1 = MatrixVectorMultiply(TransformMatrix, obj.pointarray[0]);
		point2 = MatrixVectorMultiply(TransformMatrix, obj.pointarray[1]);
		point3 = MatrixVectorMultiply(TransformMatrix, obj.pointarray[2]);
		obj.moveTo(point1[0]/(1-(point1[2]/f)), point1[1]/(1-(point1[2]/f)));
		obj.curveTo(point3[0]/(1-(point3[2]/f)), point3[1]/(1-(point3[2]/f)), point2[0]/(1-(point2[2]/f)), point2[1]/(1-(point2[2]/f)));
		camdist = Math.sqrt(Math.pow((point1[0]+point2[0]+point3[0])/3,2)+Math.pow((point1[1]+point2[1]+point3[1])/3,2)+Math.pow(f-((point1[2]+point2[2]+point3[2])/3),2));
		obj.swapDepths(Math.pow(f,3)-(Math.floor(camdist*100)));
		i ++;
	}
	i = 0;
	while (i <= surfaces-1) {
		obj = Scene["surface_"+i];
		obj.clear();
		obj.lineStyle(obj.lineweight, obj.linecolour, obj.linealpha);
		obj.beginFill(obj.fillcolour, obj.fillalpha);
		j = 0;
		xsum = ysum = zsum = 0;
		while (j <= obj.pointarray.length-1) {
			if (j == 0) {
				point1 = MatrixVectorMultiply(TransformMatrix, obj.pointarray[j][0]);
				obj.moveTo(point1[0]/(1-(point1[2]/f)), point1[1]/(1-(point1[2]/f)));
				xsum += point1[0];
				ysum += point1[1];
				zsum += point1[2];
			}
			if (obj.pointarray[j].length == 2) {
				point2 = MatrixVectorMultiply(TransformMatrix, obj.pointarray[j][1]);
				obj.lineTo(point2[0]/(1-(point2[2]/f)), point2[1]/(1-(point2[2]/f)));
				xsum += point2[0];
				ysum += point2[1];
				zsum += point2[2];
			} else { 
				point1 = MatrixVectorMultiply(TransformMatrix, obj.pointarray[j][0]);
				point2 = MatrixVectorMultiply(TransformMatrix, obj.pointarray[j][1]);
				point3 = MatrixVectorMultiply(TransformMatrix, obj.pointarray[j][2]);
				obj.curveTo(point3[0]/(1-(point3[2]/f)), point3[1]/(1-(point3[2]/f)), point2[0]/(1-(point2[2]/f)), point2[1]/(1-(point2[2]/f)));
				xsum += point1[0]+point2[0]+point3[0];
				ysum += point1[1]+point2[1]+point3[1];
				zsum += point1[2]+point2[2]+point3[2];
			}
			camdist = Math.sqrt(Math.pow((xsum)/(j+1),2)+Math.pow((ysum)/(j+1),2)+Math.pow(f-((zsum)/(j+1)),2));
			obj.swapDepths(Math.pow(f,3)-(Math.floor(camdist*100)));
			j ++;
		}
		obj.endFill();
		i ++;
	}
}


/* Sets the global transformation matrix using matrix multiplication routine. Temporary transformation matrix generated from x, y, z coordinates passed as parameters. */
function SetTransformMatrix(x, y, z, M) {
	vectorLength = Math.sqrt(x*x+y*y+z*z);
	if (vectorLength>.0001) {
		x /= vectorLength;
		y /= vectorLength;
		z /= vectorLength;
		Theta = vectorLength/500;
		cosT = Math.cos(Theta);
		sinT = Math.sin(Theta);
		tanT = 1-cosT;
		T =[[], [], []];
		T[0][0] = tanT*x*x+cosT;
		T[0][1] = tanT*x*y-sinT*z;
		T[0][2] = tanT*x*z+sinT*y;
		T[1][0] = tanT*x*y+sinT*z;
		T[1][1] = tanT*y*y+cosT;
		T[1][2] = tanT*y*z-sinT*x;
		T[2][0] = tanT*x*z-sinT*y;
		T[2][1] = tanT*y*z+sinT*x;
		T[2][2] = tanT*z*z+cosT;
		TransformMatrix = MatrixMatrixMultiply(T, M);
	}
}


/* Performs a matrix-matrix multiplication with matrix A and matrix B parameters. Returns matrix C as result. */
function MatrixMatrixMultiply(A, B) {
	C = [[], [], []];
	C[0][0] = A[0][0]*B[0][0]+A[0][1]*B[1][0]+A[0][2]*B[2][0];
	C[0][1] = A[0][0]*B[0][1]+A[0][1]*B[1][1]+A[0][2]*B[2][1];
	C[0][2] = A[0][0]*B[0][2]+A[0][1]*B[1][2]+A[0][2]*B[2][2];
	C[1][0] = A[1][0]*B[0][0]+A[1][1]*B[1][0]+A[1][2]*B[2][0];
	C[1][1] = A[1][0]*B[0][1]+A[1][1]*B[1][1]+A[1][2]*B[2][1];
	C[1][2] = A[1][0]*B[0][2]+A[1][1]*B[1][2]+A[1][2]*B[2][2];
	C[2][0] = A[2][0]*B[0][0]+A[2][1]*B[1][0]+A[2][2]*B[2][0];
	C[2][1] = A[2][0]*B[0][1]+A[2][1]*B[1][1]+A[2][2]*B[2][1];
	C[2][2] = A[2][0]*B[0][2]+A[2][1]*B[1][2]+A[2][2]*B[2][2];
	return C;
}


/* Performs a matrix-vector multiplication with matrix A and vector B parameters. Returns vector C as result. */
function MatrixVectorMultiply(A, B) {
	C = [];
	C[0] = A[0][0]*B[0]+A[0][1]*B[1]+A[0][2]*B[2];
	C[1] = A[1][0]*B[0]+A[1][1]*B[1]+A[1][2]*B[2];
	C[2] = A[2][0]*B[0]+A[2][1]*B[1]+A[2][2]*B[2];
	return C;
}
Этому примеру сто лет в обед... но чет ничего другого не нашел...
__________________
Hell is the possibility of sanity

Старый 30.10.2006, 23:31
BigDan вне форума Посмотреть профиль Отправить личное сообщение для BigDan Найти все сообщения от BigDan
  № 8  
Ответить с цитированием
BigDan
 
Аватар для BigDan

Регистрация: Apr 2006
Адрес: Kiev
Сообщений: 1,675
Отправить сообщение для BigDan с помощью ICQ
У меня есть Гурский и его исходники. Опять же это не решает проблемы. Я не прошу нарисовать объемную фигуру, а прошу объяснить как построить сечение.

Старый 31.10.2006, 12:42
FourSide вне форума Посмотреть профиль Отправить личное сообщение для FourSide Найти все сообщения от FourSide
  № 9  
Ответить с цитированием
FourSide

Регистрация: Jul 2006
Сообщений: 387
Отправить сообщение для FourSide с помощью Skype™
Честно признаться, но я не понимаю, про какое именно сечение идёт речь. Ведь сечений (фактически, плоскостей) через пирамиду может идти бесконечное множество.
Про какое именно сечение идёт речь?

Старый 31.10.2006, 12:45
BigDan вне форума Посмотреть профиль Отправить личное сообщение для BigDan Найти все сообщения от BigDan
  № 10  
Ответить с цитированием
BigDan
 
Аватар для BigDan

Регистрация: Apr 2006
Адрес: Kiev
Сообщений: 1,675
Отправить сообщение для BigDan с помощью ICQ
Цитата:
Сообщение от FourSide
Честно признаться, но я не понимаю, про какое именно сечение идёт речь. Ведь сечений (фактически, плоскостей) через пирамиду может идти бесконечное множество.
Про какое именно сечение идёт речь?
Хотя б одно. Вся задача сводится к тому, что надо узнать кординаты 4 точек через которые будет проходить сечение.

Создать новую тему Ответ Часовой пояс GMT +4, время: 04:17.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 04:17.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.