Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package
- {
- import kwm.*;
- public class Diamond{
- public static const COLOR_WHITE:uint = 0xffffff;
- public static const COLOR_BLACK:uint = 0x000000;
- public static function main(): void
- {
- var r:uint; //Größe des Radius
- var n:uint; //Anzahl der Facetten (farbig abwechselnde Flächen)
- var s:uint; //Anzahl der Segmente ("Spalten")
- var centerX:uint = 0; //Mittelpunkt auf x-Achse
- var centerY:uint; //Mittelpunkt auf y-Achse
- var valid:Boolean = true;
- while(true){
- r = Input.readUint();
- if(Input.hasEnded()){
- break;
- }
- if(!Input.isOkay()){
- valid = false;
- Input.clearError();
- }
- else if(r== 0){
- valid = false;
- }
- n = Input.readUint();
- if(Input.hasEnded()){
- break;
- }
- if(!Input.isOkay()){
- valid = false;
- Input.clearError();
- }
- else if(n < 4 || n%2 !=0){
- valid = false;
- }
- s = Input.readUint();
- if(Input.hasEnded()){
- break;
- }
- if(!Input.isOkay()){
- valid = false;
- Input.clearError();
- }
- else if(s == 0){
- valid = false;
- }
- if(!valid){
- valid = true;
- continue;
- }
- centerY = r;
- centerX += r;
- //print diamond
- printDiamond(r, n, s, centerX, centerY);
- centerX += r;
- }
- }
- public static function printDiamond(r:uint, n:uint, s:uint,
- centerX:uint, centerY:uint):void{
- var length:Number = r;
- var color:uint = COLOR_BLACK;
- for(var i:uint = 0; i < s; i++){
- printCircle(centerX, centerY, length, n, color);
- if(color == COLOR_BLACK)
- color = COLOR_WHITE;
- else
- color = COLOR_BLACK;
- length -= (r/s);
- }
- }
- //liefert die x-Koordinate des Punktes, der sich vom Punkt (x,*)
- //aus gesehen im Abstand "radius" und Winkel "angle" befindet.
- public static function printCircle(centerX:uint, centerY:uint,
- length:Number, n:uint, color:uint):void{
- var angle:Number = 0;
- var curCircleX:Number = xCoordinate(centerX, length, angle);
- var curCircleY:Number = yCoordinate(centerY, length, angle);
- var newCircleX:Number;
- var newCircleY:Number;
- while(angle < 2*Math.PI){
- angle += 2*Math.PI/n;
- newCircleX = xCoordinate(centerX, length, angle);
- newCircleY = yCoordinate(centerY, length, angle);
- //print a triangle
- printTriangle(centerX, centerY, curCircleX, curCircleY,
- newCircleX, newCircleY, color);
- curCircleX = newCircleX;
- curCircleY = newCircleY;
- if(color == COLOR_BLACK)
- color = COLOR_WHITE;
- else
- color = COLOR_BLACK;
- }
- }
- public static function printTriangle(centerX:uint, centerY:uint,
- curCircleX:Number, curCircleY:Number,
- newCircleX:Number, newCircleY:Number, color: uint):void{
- Drawing.graphics.lineStyle(1, COLOR_BLACK);
- Drawing.graphics.beginFill(color);
- Drawing.graphics.moveTo(centerX, centerY);
- Drawing.graphics.lineTo(curCircleX, curCircleY);
- Drawing.graphics.lineTo(newCircleX, newCircleY);
- Drawing.graphics.lineTo(centerX, centerY);
- Drawing.graphics.endFill();
- }
- public static function xCoordinate (x:Number, r:Number, angle:Number): Number{
- return x+r*Math.cos(angle);
- }
- //liefert die y-Koordinate des Punktes, der sich vom Punkt (*,y)
- //aus gesehen im Abstand "radius" und Winkel "angle" befindet.
- public static function yCoordinate (y:Number, r:Number, angle:Number): Number{
- return y-r*Math.sin(angle);
- }
- }
- }
Add Comment
Please, Sign In to add comment