Показать сообщение отдельно
Старый 19.03.2013, 23:37
zomkoner вне форума Посмотреть профиль Отправить личное сообщение для zomkoner Посетить домашнюю страницу zomkoner Найти все сообщения от zomkoner
  № 1  
Ответить с цитированием
zomkoner
 
Аватар для zomkoner

Регистрация: Dec 2012
Адрес: Россия
Сообщений: 57
Question Програмное рисование окружности

Всем доброго времени суток! Я по ходу изучения AS3, делаю мини программки для закрепления прочитанного!
Вот решил создать графический редактор! Пока осуществил только рисование квадрата, а вот с рисованием окружности столкнулся с проблемой. Задача в том: Пользователь нажимает на мышь и растягивая её создает окружность которое не заходит за границы там где он нажал на мышь и там где он её отпустил! вот код:
Код AS3:
/* 
test_gr - shape
test_start - point | координаты там где пользователь  начал создание окружности
test_start - point | координаты там где пользователь  закончил создание окружности
*/
var ha_x:Number = test_start.x + ((test_finish.x - test_start.x)/2);// это середина по линии x
var ha_y:Number = test_start.y + ((test_finish.y - test_start.y)/2);//это середина по линии y
// далее теорема пифагора! я попытался узнать радиус окружности
var ha_w:Number = Math.sqrt((test_finish.x - ha_x)^2+(test_finish.y - ha_y)^2);		
test_gr.graphics.drawCircle(ha_x, ha_y, ha_w); 
test_gr.graphics.endFill();
Но радиус не получается. Подскажите решение проблемы. Или может есть решение попроще. Если я что либо не уточнил, или забыл сообщить, то извините и спрашивайте я объясню! Вот на всякий случай полный код программки но без комментарий:
Код AS3:
package
{
	import TestFile;
 
	import flash.display.Loader;
	import flash.display.Shape;
	import flash.display.Sprite;
	import flash.events.*;
	import flash.geom.Point;
 
	public class oneProject extends Sprite
	{
		private var foc_MouseDown_B:Boolean = new Boolean(false);
		private var foc_MouseUp_B:Boolean = new Boolean(true);
		private var foc_Start_B:Boolean = new Boolean(false);
		private var foc_Finish_B:Boolean = new Boolean(true);
 
 
		private var _StartGraphics_P:Point = new Point();
		private var _FinishGraphics_P:Point = new Point();
 
		private var _Method_S:String = new String("RECT");
 
		private var _Panel_SPR:Sprite = new Sprite();
		private var pan_Panel_SPR:Sprite = new Sprite();
		private var pan_Graph_SPR:Sprite = new Sprite();		
		private var pan_pan_Method_SH:Sprite = new Sprite();
		private var test_gr:Shape = new Shape();
		private var _GRAPHICS_AS:TestFile = new TestFile();
		public function oneProject()
		{
				func_OneStart();
		}
		public function func_OneStart():void{
			addChild(_Panel_SPR);
			_Panel_SPR.addChild(pan_Panel_SPR);
			_Panel_SPR.addChild(pan_Graph_SPR);
			pan_Panel_SPR.addChild(pan_pan_Method_SH);
			pan_Graph_SPR.graphics.lineStyle(4,0x020202,1,true);
			pan_Graph_SPR.graphics.beginFill(0xEEEEEE, 1);
			pan_Graph_SPR.graphics.drawRect(30, 30, 1110, 600);
			pan_Graph_SPR.graphics.endFill();
			pan_Panel_SPR.graphics.lineStyle(4,0x121212,1,true);
			pan_Panel_SPR.graphics.beginFill(0xAFBECD, 1);
			pan_Panel_SPR.graphics.drawRect(30, 0, 1110, 30);
			pan_Panel_SPR.graphics.endFill();
			pan_Panel_SPR.graphics.moveTo(70, 0);
			pan_Panel_SPR.graphics.lineTo(70,30);
			pan_Panel_SPR.graphics.endFill();
 
			var el_Rect:Sprite = new Sprite();
			el_Rect = func_element_panel(1);
			el_Rect.x = 40;
			el_Rect.y = 5;
			el_Rect.name = "RECT";
 
			var el_Circle:Sprite = new Sprite();
			el_Circle = func_element_panel(2);
			el_Circle.x = 85;
			el_Circle.y = 15;
			el_Circle.name = "CIRCLE";			
 
			addChild(el_Circle);
			addChild(el_Rect);
			el_Circle.addEventListener(MouseEvent.CLICK, func_element_click);
			el_Rect.addEventListener(MouseEvent.CLICK, func_element_click);
 
			pan_Graph_SPR.addEventListener(MouseEvent.MOUSE_DOWN, func_graphics_on);
			pan_Graph_SPR.addEventListener(MouseEvent.MOUSE_UP, func_graphics_of);
			pan_Graph_SPR.addEventListener(MouseEvent.MOUSE_MOVE, func_graphics_proc);
		}
		public function func_test(test_start:Point, test_finish:Point):void{
			test_gr.graphics.clear();
			test_gr.graphics.lineStyle(1, 0x000000, 1, true);
			test_gr.graphics.beginFill(0xFF0000, 1);
			var width:Number = new Number(test_finish.x - test_start.x);
			var height:Number = new Number(test_finish.y - test_start.y);
			switch(_Method_S){
				case "RECT" :
					test_gr.graphics.drawRect(test_start.x, test_start.y, width, height);
					test_gr.graphics.endFill();
				break;
				case "CIRCLE" :
					var ha_x:Number = test_start.x + ((test_finish.x - test_start.x)/2);
					var ha_y:Number = test_start.y + ((test_finish.y - test_start.y)/2);
					var ha_w:Number = Math.sqrt((test_finish.x - ha_x)^2+(test_finish.y - ha_y)^2);
					trace("     - " + Math.sqrt(5));
					test_gr.graphics.drawCircle(ha_x, ha_y, ha_w);
					test_gr.graphics.endFill();
				break;
			}
 
		}
		public function func_graphics_proc(e:MouseEvent):void{
			if(foc_Start_B == true){
				switch(_Method_S){
					case "RECT" :
						_FinishGraphics_P = new Point(e.localX, e.localY);
						trace(_StartGraphics_P.x + " | " + _StartGraphics_P.y)
						func_test(_StartGraphics_P, _FinishGraphics_P);
					break;
					case "CIRCLE" :
						_FinishGraphics_P = new Point(e.localX, e.localY);
						trace(_StartGraphics_P.x + " | " + _StartGraphics_P.y)
						func_test(_StartGraphics_P, _FinishGraphics_P);
					break;
				}
			}	
		}
		public function func_graphics_on(e:MouseEvent):void{
			switch(_Method_S){
				case "RECT" :
					foc_MouseDown_B = true;
					foc_MouseUp_B = false;
					foc_Start_B = true;
					foc_Finish_B = false;
					_StartGraphics_P = new Point(e.localX, e.localY);
					trace(_StartGraphics_P.x + " | " + _StartGraphics_P.y)
					pan_Graph_SPR.addChild(test_gr);
				break;
				case "CIRCLE" :
					foc_MouseDown_B = true;
					foc_MouseUp_B = false;
					foc_Start_B = true;
					foc_Finish_B = false;
					_StartGraphics_P = new Point(e.localX, e.localY);
					trace(_StartGraphics_P.x + " | " + _StartGraphics_P.y)
					pan_Graph_SPR.addChild(test_gr);
				break;
			}		
		}
		public function func_graphics_of(e:MouseEvent):void{
			if(foc_Start_B = true){
				switch(_Method_S){
					case "RECT" :
						foc_MouseDown_B = false;
						foc_MouseUp_B = true;
						foc_Start_B = false;
						foc_Finish_B = true;
						_FinishGraphics_P = new Point(e.localX, e.localY);
						trace(_StartGraphics_P.x + " | " + _StartGraphics_P.y)
					break;
					case "CIRCLE" :
						foc_MouseDown_B = false;
						foc_MouseUp_B = true;
						foc_Start_B = false;
						foc_Finish_B = true;
						_FinishGraphics_P = new Point(e.localX, e.localY);
						trace(_StartGraphics_P.x + " | " + _StartGraphics_P.y)
					break;
				}
			}
		}
		public function func_element_click(e:MouseEvent):void{
			_Method_S = e.target.name;
		}
		public function func_element_panel(ff_ind:uint):Sprite{
			var f_shape:Sprite = new Sprite();
			switch (ff_ind){
				case 1:
				f_shape.graphics.lineStyle(1,0x000000,0.7,true);
				f_shape.graphics.beginFill(0xF44100, 1);
				f_shape.graphics.drawRect(0,0,20,20);
				f_shape.graphics.endFill();
				break;
				case 2:
					f_shape.graphics.lineStyle(1,0x000000,0.7,true);
					f_shape.graphics.beginFill(0xF44100, 1);
					f_shape.graphics.drawCircle(0,0,10);
					f_shape.graphics.endFill();
				break;
			}
			return f_shape;
		}
	}
}
Заранее очень Вам блогадарен!
__________________
Я слышу и забываю.Я вижу и запоминаю.Я делаю и понимаю.