2009-12-20 2 views
0

EDIT (설명을 위해) :
나는 간단한 윤곽선, 불규칙한 닫힌 다각형을 가진 벡터 이미지를 가지고있다.
다각형을 구성하는 각 세그먼트에 프로그래밍 방식으로 액세스 할 수 있도록 Flash로 가져와야합니다.
벡터 이미지를 라이브러리에 MovieClip으로 가져 오는 것은 좋지 않습니다. 왜냐하면 내가 얻을 수있는 모든 형상 정보가 전혀 없기 때문입니다.
목표는 다각형의 면적을 계산하고 다각형과 다른 다각형 간의 교차점을 계산하는 것입니다.
모든 세그먼트를 읽고 해당 좌표가있는 CSV 파일을 작성하는 Illustrator 스크립트를 작성할 수 있다고 생각합니다. 그러나 더 간단한 방법이 있어야합니다. 즉, 둘 다 vectorial이고 서로를 이해해야합니다.ActionScript 3.0 : 도형 세그먼트에 액세스하는 방법?

감사합니다.

.

- 올드 포스트 -

내가이 무비 클립으로 플래시 라이브러리로 가져올 벡터 그래픽의 윤곽을 가지고있다.
movieclip을 설치하면 실제 윤곽선 인 Shape 하위가 있습니다.
출발점과 종점을 얻기 위해 윤곽선 세그먼트, 즉 다각형의면에 액세스 할 수 있어야합니다. 방법이 있습니까?
Graphics 클래스는 그리기 만 허용하지만 Shape 클래스에서와 같이 그리는 것은 객체가 아니며 측면이있는 다각형이 아니어도 상관 없습니다.
나는 명확합니까? 감사합니다.

+0

조금 명확하지 않습니다. 다시 말해주세요. –

답변

2

Graphics 객체의 데이터를 읽는 방법은 없습니다 (본질적으로 사용자가 따르는 정보를 포함하고 있습니다.) 이것은 이미 그려져있는 벡터 그래픽 객체, 즉 Graphics/drawing API 자체 또는 Flash CS3/CS4에서 사용하거나 [Embed] 메타 태그를 사용하여 포함 시켰습니다.

대수 영역을 계산해야하거나 다른 이유로 알고리즘에서 벡터를 유지해야하거나 Illustrator에서 SVG 또는 점의 CSV와 같은 일부 특수 형식을 내보내는 것이 가장 좋습니다. ActionScript에서 파싱합니다.

또 다른 옵션은 BitmapData를 사용하여 그 위에 Shape 객체를 그리고 색상이 지정된 (불투명 한) 픽셀을 계산하여 숫자로 계산합니다.

var bmp : BitmapData = new BitmapData(myShape.width, myShape.height, true, 0); 
bmp.draw(myShape); 

var i : uint; 
var area : uint = 0; 
var num_pixels : uint = bmp.width*bmp.height; 
for (i=0; i<num_pixels; i++) { 

    var px : uint = bmp.getPixel32(i%bmp.width, Math.floor(i/bmp.height)); 

    // Determine from px color/alpha whether it's part of the shape or not. 
    // This particular if statement should determine whether the alpha 
    // component (first 8 bits of the px integer) are greater than zero, i.e. 
    // not transparent. 
    if ((px >> 24) > 0) 
    area++; 
} 

trace('number of opaque pixels (area): '+area); 

응용 프로그램에 따라, 당신은 또한 당신의 충돌 감지에 대한 BitmapData.hitTest() 방법을 사용할 수 있습니다.

+0

그 방법은 ... 나는 SVG가 가장 우아한 방법이라고 생각합니다. 벡터 데이터 (선/곡선 교차 등 계산)에 대해 실제로 작업하고 싶다면 ...거기에 파싱 및 렌더링을위한 SVG 라이브러리가 많이 있습니다 ... – back2dos

+0

고마워! 좋은 대답. 세그먼트를 CSV 또는 그와 비슷한 것으로 내보내는 일러스트 레이터 스크립트를 사용하겠습니다. 이미 삼각형으로 다각형을 분할하고 모든 영역을 추가하는 아주 간단한 알고리즘을 생각했습니다. 아니면 더 좋은 방법이 있습니까? 다시 한번 감사드립니다. – Petruza

+0

좋아, 재밌게 지내라! :) 영역에 관해서는, 위키 페다의 다각형 영역에 대한 일반화 된 알고리즘이 있습니다. http://en.wikipedia.org/wiki/Polygon#Area_and_centroid – richardolsson

1

저는 Shape 객체에서 직사각형 경계 상자를 검색하는 것이 최선이라고 생각합니다. 가져온 방법에 따라 Shape 객체에 인스턴스 변수로 직접 액세스 할 수도 그렇지 않을 수도 있습니다. 그러나 그렇게하면 shapeVar.transform.getBounds() 또는 shapeVar.transform.getRect()를 호출 할 수 있습니다 (bounds는 모양에 획을 포함하여 사각형을 반환하지만 rect는 그렇지 않습니다).

저는 궁금해서 일부 픽셀 경계를 얻는 대체 방법에 대한 연구를하고 있습니다. 내가 뭔가 유용한 것을 발견하면 이것을 더 편집 할 것입니다.

관련 문제