![]() |
|
||||||||||
|
|||||
|
Есть две точки (Point), представляющие собой вектор. Необходимо найти третью точку, которая должна располагаться посередине отрезка, проведенного между двумя этими точками.
Как это лучше всего сделать по-науке? Буду благодарна за кусок кода! Дело в том, что когда начинаешь это делать ручками, то все получается до тех пор, пока координаты не становятся отрицательными. Последний раз редактировалось iNils; 10.01.2008 в 18:06. |
|
|||||
|
Регистрация: Aug 2007
Сообщений: 467
|
ActionScript 2.0 Language Reference
ActionScript classes > Point (flash.geom.Point) > subtract (Point.subtract method)
subtract (Point.subtract method)
public subtract(v:Point) : Point
Subtracts the coordinates of another point from the coordinates of this point to create a new point.
Availability: ActionScript 1.0; Flash Player 8
Parameters
v:Point - The point to be subtracted.
Returns
Point - The new point.
Example
The following example creates point_3 by subtracting point_2 from point_1.
import flash.geom.Point;
var point_1:Point = new Point(4, 8);
var point_2:Point = new Point(1, 2);
var resultPoint:Point = point_1.subtract(point_2);
trace(resultPoint.toString()); // (x=3, y=6)
|
|
|||||
|
Спасибо! А теперь немного посложнее задача, есть переменные a и b:
Как найти координаты x3 и y3, таким образом, чтобы они лежали на заданном отрезке (который, как следует из самого первого условия задан координатами x1, y1 и x2, y2) и чтобы курсор мышки был максимально приближен к этой точке? |
|
|||||
|
Регистрация: Jul 2007
Адрес: Россия, Москва
Сообщений: 522
|
Вы хотите программно навести курсор на эту точку, или что? А найти точку:
На сколько я понимаю так. Ну или, делайте x2*2-x1, и так же с y2. |
|
|||||
|
[+4 05.12.07]
[+1 11.01.08] Регистрация: Nov 2007
Сообщений: 51
|
Делается так, по законам геометрии. Уже моск не работает, чтобы формулы вспоминать.
Для этого надо находить точки пересечения катетов с вектором, чтобы узнать их длину, после узнать гипотенузу, проецировать на вектор, узнать расположение точки, если я не ошибаюсь. Хотя мне кажется, что можно намного проще. Последний раз редактировалось Freeeeeeeman; 11.01.2008 в 01:20. |
|
|||||
|
Modus ponens
|
var line_mc:MovieClip = _root.createEmptyMovieClip('line_mc',0);
var middle_mc:MovieClip = rct(this,10,10,0xff,50);
function rct(mc:MovieClip,w:Number,h:Number,c:Number,a:Number):MovieClip {
var _mc:MovieClip = mc.createEmptyMovieClip("mc"+mc.getNextHighestDepth(),mc.getNextHighestDepth());
_mc.beginFill(c,a);
_mc.lineTo(w,0);
_mc.lineTo(w,h);
_mc.lineTo(0,h);
_mc.lineTo(0,0);
_mc.endFill();
return _mc;
}
middle_mc.lineStyle(1,0,100);
middle_mc.lineTo(10,10);
middle_mc.moveTo(0,10);
middle_mc.lineTo(10,0);
//
function drawRotatedLine():Void {
line_mc.clear();
line_mc.lineStyle(1,0,100);
line_mc.moveTo(Stage.width/2,Stage.height/2);
line_mc.lineTo(_xmouse,_ymouse);
middle_mc._x = Stage.width/2-(Stage.width/2-_xmouse)/2-5;
middle_mc._y = Stage.height/2-(Stage.height/2-_ymouse)/2-5;
}
_root.onMouseMove = drawRotatedLine;
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: Sep 2006
Сообщений: 32
|
Цитата:
onEnterFrame = function () {
var dx:Number = b._x-a._x;
var dy:Number = b._y-a._y;
var t:Number = (_xmouse*dx-a._x*dx+_ymouse*dy-a._y*dy)/(dx*dx+dy*dy);
if(t>1)t=1;
if(t<0)t=0;
c._x = a._x+(b._x-a._x)*t;
c._y = a._y+(b._y-a._y)*t;
};
mcDrag("a");a._x = 50; a._y = 50;
mcDrag("b");b._x = 150; b._y = 150;
mcDrag("c");delete c.onPress;
function mcDrag(name:String)
{
var mc:MovieClip = _root.createEmptyMovieClip(name,_root.getNextHighestDepth());
mc.beginFill(0xcccccc*Math.random());
var r:Number = 5;
mc.moveTo(-r,-r);
mc.lineTo( r,-r);
mc.lineTo( r, r);
mc.lineTo(-r, r);
mc.endFill();
mc.onPress=function(){this.startDrag()}
mc.onMouseUp=function(){this.stopDrag()}
}
![]()
__________________
http://www.free-lance.ru/users/goarcade |
|
|||||
|
А не прще-ли использовать
для нахождения координат точки середины отрезка ? |
![]() |
![]() |
Часовой пояс GMT +4, время: 00:29. |
|
|
« Предыдущая тема | Следующая тема » |
|
|