Помогите допилить функцию рисования круга!

Программирование на Юнити.

Помогите допилить функцию рисования круга!

Сообщение Avatarchik 07 июн 2010, 01:16

Помогите допилить функцию рисования! на данный момент рисуется только контур,а надо с заливкой.(Вот то что сини зарисовано это мои попытки .в коде я пометил)
Синтаксис:
Используется csharp
  void draw_circle(int x_center, int y_center, int x, int y, int radius, int Color)
    {
        int r2 = radius * radius; // радиус
        grid[x_center, y_center + radius] = Color;
        grid[x_center, y_center - radius] = Color;
        grid[x_center + radius, y_center] = Color;
        grid[x_center - radius, y_center] = Color;
        grid[x_center, y_center] = 3;//центр окружности




        x = 1;
        y = (int)(Math.Sqrt(r2 - 1) + 0.5f);

        ////Эт попытки зарисовать круг
        ////От се
        for (int i = 0; i < radius; i++)
        {
            grid[x_center, y_center + i] = 2;
            grid[x_center, y_center - i] = 2;
            grid[x_center + i, y_center] = 2;
            grid[x_center - i, y_center] = 2;

        }
        ////До се


        while (x < y)
        {


            grid[x_center + x, y_center + y] = Color;
            grid[x_center + x, y_center - y] = Color;
            grid[x_center - x, y_center + y] = Color;
            grid[x_center - x, y_center - y] = Color;
            grid[x_center + y, y_center + x] = Color;
            grid[x_center + y, y_center - x] = Color;
            grid[x_center - y, y_center + x] = Color;
            grid[x_center - y, y_center - x] = Color;


            ++x;
            y = (int)(Math.Sqrt(r2 - x * x) + 0.5f);
        }
        if (x == y)
        {
            grid[x_center + x, y_center + y] = Color;
            grid[x_center + x, y_center - y] = Color;
            grid[x_center - x, y_center + y] = Color;
            grid[x_center - x, y_center - y] = Color;




        }

    }


HTML код для вашего блога :
Код: Выделить всё
<script language='javascript' type="text/javascript"> document.write("<iframe marginheight='0' src='http://unity3d.ru/distribution/player.php?url=http://dc198.4shared.com/download/308641136/866e6ccb/Task2.unity3d&w=480&h=320&t=true&preview=1' height='"+(320+30)+"' width='480' frameborder='0' scrolling='no'></iframe>"); </script>


Пакадж:
DrawCricle.unitypackage
У вас нет доступа для просмотра вложений в этом сообщении.
Добавить ava-karaban в Skype
Аватара пользователя
Avatarchik
UNITрон
 
Сообщения: 274
Зарегистрирован: 04 апр 2009, 15:36
Откуда: Украина(Донецк)
  • ICQ

Re: Помогите допилить функцию рисования круга!

Сообщение gnoblin 07 июн 2010, 02:07

Идешь по рядам пикселей в картинке: в зависимости от режима красишь текущий пиксель или нет.
Если предыдущий оригинальный пиксель по цвету не совпадает с текущим, то делаем drawing_mode = !drawing_mode; (т.е. надо запоминать последний цвет пикселя в переменную, например, last_pixel_color).
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Помогите допилить функцию рисования круга!

Сообщение DbIMok 07 июн 2010, 08:38

http://compgraph.ad.cctpu.edu.ru/region.htm
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
using System;

public class Main : MonoBehaviour
{
    public int tileWidth = 16;
    public int tileHeight = 16;
    public Texture[] tex_state;
    int[,] grid = new int[64, 48];
       
    void draw_circle(int x_center, int y_center, int x, int y, int radius, int Color)
    {
        int r2 = radius * radius; // радиус
        grid[x_center, y_center + radius] = Color;
        grid[x_center, y_center - radius] = Color;
        grid[x_center + radius, y_center] = Color;
        grid[x_center - radius, y_center] = Color;
        grid[x_center, y_center] = 3;//центр окружности

        x = 1;
        y = (int)(Math.Sqrt(r2 - 1) + 0.5f);

        while (x < y)
        {
            grid[x_center + x, y_center + y] = Color;
            grid[x_center + x, y_center - y] = Color;
            grid[x_center - x, y_center + y] = Color;
            grid[x_center - x, y_center - y] = Color;
            grid[x_center + y, y_center + x] = Color;
            grid[x_center + y, y_center - x] = Color;
            grid[x_center - y, y_center + x] = Color;
            grid[x_center - y, y_center - x] = Color;
            ++x;
            y = (int)(Math.Sqrt(r2 - x * x) + 0.5f);
        }
        if (x == y)
        {
            grid[x_center + x, y_center + y] = Color;
            grid[x_center + x, y_center - y] = Color;
            grid[x_center - x, y_center + y] = Color;
            grid[x_center - x, y_center - y] = Color;
        }
    }

    void PixelFill(int x, int y, int bc, int color)
    {
        int c = grid[x, y];
        if ((c != bc) && (c != color))
        {
            grid[x, y] = color;
            PixelFill(x-1, y, bc, color);
            PixelFill(x+1, y, bc, color);
            PixelFill(x, y-1, bc, color);                      
        }
    }
       
    void OnGUI()
    {
   
        for (int x = 0; x < grid.GetLength(0); x++)
        {

            for (int y = 0; y < grid.GetLength(1); y++)
            {
                GUI.DrawTexture(new Rect((x * tileWidth), (y * tileHeight), tileWidth, tileHeight), tex_state[grid[x, y]]);

            }
        }

        draw_circle(20, 20, 5, 5, 5, 1);
        PixelFill(20,20,1,2);
    }
 

HTML код для вашего блога :
Код: Выделить всё
<script language='javascript' type="text/javascript"> document.write("<iframe marginheight='0' src='http://unity3d.ru/distribution/player.php?url=http://dc266.4shared.com/download/308868279/4d39779d/testfill.unity3d&w=480&h=320&t=false&preview=1' height='"+(320+30)+"' width='480' frameborder='0' scrolling='no'></iframe>"); </script>
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Помогите допилить функцию рисования круга!

Сообщение Avatarchik 07 июн 2010, 10:32

Спс DbIMok! \m/ ,а гнобу за пдсказку :D
Добавить ava-karaban в Skype
Аватара пользователя
Avatarchik
UNITрон
 
Сообщения: 274
Зарегистрирован: 04 апр 2009, 15:36
Откуда: Украина(Донецк)
  • ICQ


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12