Как нарисовать треугольник в математическом графике? - PullRequest
2 голосов
/ 31 марта 2010

Как нарисовать треугольник на математическом графике, который отображает оси X и Y.

Ответы [ 2 ]

1 голос
/ 02 апреля 2010

Чтобы рисовать фигуры с помощью ActionScript2, вы можете использовать методы moveTo () и lineTo () объекта MovieClip. Вы можете указать цвет и толщину линии с помощью lineStyle () или создать сплошную форму с помощью beginFill () и endFill () .

Итак, чтобы нарисовать график и треугольник, вы можете сделать следующие шаги:

  1. Сделать мувиклип с именем «graph»
  2. Определите, насколько большим должен быть ваш график (используя объект flash.geom.Rectangle)
  3. Нарисуйте серый фон, используя graph.beginFill (серый), а затем moveTo () и lineTo ()
  4. Нарисуйте несколько синих линий через равные промежутки времени для сетки
  5. Нарисуйте оси X и Y сбоку и снизу вашей сетки
  6. Сделайте второй мувиклип с именем "shape"
  7. Выберите 3 случайные точки: moveTo (точка1), lineTo (точка2), lineTo (точка3), lineTo (точка1)

Вот как может выглядеть код:

import flash.geom.Point;
import flash.geom.Rectangle;

function drawGraph(mc:MovieClip, rect:Rectangle):Void {
//this is a function to draw the graph

    //draw the background
    mc.beginFill(0xF8F8F8);
    mc.moveTo(rect.left, rect.bottom);
    mc.lineTo(rect.left, rect.top);
    mc.lineTo(rect.right, rect.top);
    mc.lineTo(rect.right, rect.bottom);
    mc.lineTo(rect.left, rect.bottom);
    mc.endFill();

    //draw a grid
    var unit:Number = 20;
    mc.lineStyle(1, 0x0000FF, 20, true, "none", "round", "round");
    var i:Number=rect.x;
    do {
        i=i+unit;
        mc.moveTo(i, rect.bottom);
        mc.lineTo(i, rect.top);
    } while (i<rect.right);
    i=rect.bottom;
    do {
        i=i-unit;
        mc.moveTo(rect.left, i);
        mc.lineTo(rect.right,i);
    } while (i>rect.top);

    //draw the axes
    mc.lineStyle(2, 0x808080, 100, true, "none", "round", "round");
    mc.moveTo(rect.left, rect.bottom);
    mc.lineTo(rect.left, rect.top);
    mc.moveTo(rect.left, rect.bottom);
    mc.lineTo(rect.right, rect.bottom);
}

function randomPoint(rect:Rectangle):Point {
//this is a function which returns a random point within rect
    var p:Point = new Point(rect.x+Math.random()*rect.width, rect.y+Math.random()*rect.height);
    return p;
}

function drawTriangle(mc:MovieClip, rect:Rectangle):Void {
//this is a function to draw the triangle

    // pick 3 random points within rect
    var p1:Point = randomPoint(rect);
    var p2:Point = randomPoint(rect);
    var p3:Point = randomPoint(rect);

    //connect the points to make a triangle
    mc.lineStyle(3, 0xFF0000, 100, true, "none", "round", "round");
    mc.moveTo(p1.x, p1.y);
    mc.lineTo(p2.x, p2.y);
    mc.lineTo(p3.x, p3.y);
    mc.lineTo(p1.x, p1.y);

}

//make the 'graph' clip:
var myGraph:MovieClip = this.createEmptyMovieClip("myGraph", this.getNextHighestDepth());
//define the graph size:
var myRect:Rectangle = new Rectangle(50,50,300,300);
drawGraph(myGraph,myRect);//draw the graph
var myShape:MovieClip = this.createEmptyMovieClip("myShape", this.getNextHighestDepth());//make the 'shape' clip
drawTriangle(myShape,myRect);//draw a random triangle

//add a function to draw a new triangle when the graph is clicked:
myGraph.onRelease = function() {
myShape.clear();//erase the old triangle
drawTriangle(myShape,myRect);//draw a new one
}

Вы можете щелкнуть график , чтобы создать новый случайный треугольник.

график + треугольник http://roi.webfactional.com/img/so/graph.jpg

0 голосов
/ 01 апреля 2010

Похоже, вам нужно знать, как работает API рисования во Flash. Ваш вопрос довольно расплывчатый, но это может помочь вам начать - обратитесь к Google "Flash Drawing API" для получения дополнительной информации.

var point1:Point = new Point (0, 0);
var point2:Point = new Point (25, -50);
var point3:Point = new Point (50, 0);

var s:Sprite = new Sprite();
s.graphics.lineStyle(1, 0xff0000);
s.graphics.beginFill(0x000000);

s.graphics.moveTo(point1.x, point1.y);
s.graphics.lineTo(point2.x, point2.y);
s.graphics.lineTo(point3.x, point3.y);
s.graphics.lineTo(point1.x, point1.y);

s.graphics.endFill();
s.graphics.lineStyle(0);

s.x = (stage.stageWidth - s.width) / 2;
s.y = ((stage.stageHeight - s.height) / 2) + 50;

addChild(s);

Надеюсь, это поможет, дайте мне знать, если у вас есть какие-либо вопросы.

ПРИМЕЧАНИЕ. В этом решении используется ActionScript 3. Если вам нужен AS2, это не сработает, и я не знаю, как помочь, но вы можете просто попробовать поискать «AS2 Drawing API» или что-то в этом роде. на этот счет.

...