Re: Помогите новичку
Posted: Sat Dec 26, 2015 12:18 am
First, confirm the problem, I personally did not do the effort to do so
Code: Select all
#define MEMSIZE 4096*4
#include "../lib/kolibri.h"
void main()
{
loop() switch(WaitEvent())
{
case evButton:
ExitProcess();
case evReDraw:
DrawWindow();
}
}
void DrawWindow()
{
int i;
dword col;
DefineAndDrawWindow(215,100,350,200,0x34,0xFFFFFF,"Mix colors");
for (i=0; i<=10; i++) {
col = DrawMixedColor(0xFFFfff, 0x000000, i);
DrawBar(20*i+10,10,20,80,col);
}
}
unsigned DrawMixedColor(dword _base, _overlying, _alpha)
{
// R= R1*a + R2*(1-a)
unsigned r1, r2;
r1 = _base / 10 * _alpha;
r2 = _overlying / 10;
return 10 - _alpha * r2 + r1;
}
Code: Select all
unsigned DrawMixedColor(dword _base, _overlying, byte _alpha) {
byte b1 = byte(_base & 0xFF); _base >>= 8;
byte g1 = byte(_base & 0xFF); _base >>= 8;
byte r1 = byte(_base & 0xFF);
byte b2 = byte(_overlying & 0xFF); _overlying >>= 8;
byte g2 = byte(_overlying & 0xFF); _overlying >>= 8;
byte r2 = byte(_overlying & 0xFF);
byte n_a = 255 - a;
byte r = r1*a/255 + r2*n_a/255;
byte g = g1*a/255 + g2*n_a/255;
byte b = b1*a/255 + b2*n_a/255;
return dword(r)<<16 + dword(g)<<8 + dword(b);
}
Code: Select all
#define MEMSIZE 4096*100
#include "../lib/io.h"
#include "../lib/gui.h"
#include "../lib/math.h"
#include "../lib/random.h"
#include "../lib/draw_buf.h"
proc_info Form;
DrawBufer canvas;
void main()
{
initStars();
loop() {
WaitEventTimeout(1);
switch(EAX & 0xFF)
{
case evButton:
ExitProcess();
break;
case evReDraw:
DefineAndDrawWindow(215,100,500+9,400+skin_height+4,0x73,0xFFFFFF,"Window header");
GetProcessInfo(#Form, SelfInfo);
canvas.zoom = 1;
canvas.Init(0, 0, Form.cwidth, Form.cheight);
break;
default:
if (buf_data) drawStars();
}
}
}
#define MAX_DEPTH 32;
#define STARS_COUNT 512
struct star
{
int x;
int y;
float z;
} stars[STARS_COUNT];
int randomRange(int minVal,maxVal) {
float rand;
rand = random(100)/100;
return math.floor( maxVal - minVal - 1 * rand ) + minVal;
}
void initStars() {
int i;
for( i = 0; i < STARS_COUNT; i++ ) {
stars[i].x = randomRange(-25,25);
stars[i].y = randomRange(-25,25);
stars[i].z = randomRange(1,MAX_DEPTH);
}
}
void drawStars() {
float k;
float temp;
int i, shade, px, py, size;
int halfWidth = Form.cwidth / 2;
int halfHeight = Form.cheight / 2;
dword color;
canvas.Fill(0);
for( i = 0; i < STARS_COUNT; i++ )
{
stars[i].z -= 0.2;
if( stars[i].z <= 0 ) {
stars[i].x = randomRange(-25,25);
stars[i].y = randomRange(-25,25);
stars[i].z = MAX_DEPTH;
}
k = 128.0 / stars[i].z;
px = math.ceil(stars[i].x * k + halfWidth);
py = math.ceil(stars[i].y * k + halfHeight);
if( (px >= 0) && (px + 5 <= Form.cwidth) && (py >= 0) && (py + 5 <= Form.cheight) ) {
temp = stars[i].z / 32.0;
size = math.ceil(1 - temp * 5);
shade = math.ceil(1 - stars[i].z * 255 / 32);
color = calc(shade << 16) + calc(shade << 8) + shade;
canvas.DrawBar(px, py, size, size, color);
}
}
canvas.Show();
}
/*
///!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!ORIGINAL CODE BELOW!!!!!!!!!!/////////////////////////
MAX_DEPTH = 32;
var canvas, ctx;
var stars = new Array(512);
window.onload = function() {
canvas = document.getElementById("tutorial");
if( canvas && canvas.getContext ) {
ctx = canvas.getContext("2d");
initStars();
setInterval(loop,33);
}
}
// Returns a random number in the range [minVal,maxVal]
function randomRange(minVal,maxVal) {
return Math.floor(Math.random() * (maxVal - minVal - 1)) + minVal;
}
function initStars() {
for( var i = 0; i < stars.length; i++ ) {
stars[i] = {
x: randomRange(-25,25),
y: randomRange(-25,25),
z: randomRange(1,MAX_DEPTH)
}
}
}
function loop() {
var halfWidth = canvas.width / 2;
var halfHeight = canvas.height / 2;
ctx.fillStyle = "rgb(0,0,0)";
ctx.fillRect(0,0,canvas.width,canvas.height);
for( var i = 0; i < stars.length; i++ ) {
stars[i].z -= 0.2;
if( stars[i].z <= 0 ) {
stars[i].x = randomRange(-25,25);
stars[i].y = randomRange(-25,25);
stars[i].z = MAX_DEPTH;
}
var k = 128.0 / stars[i].z;
var px = stars[i].x * k + halfWidth;
var py = stars[i].y * k + halfHeight;
if( px >= 0 && px <= 500 && py >= 0 && py <= 400 ) {
var size = (1 - stars[i].z / 32.0) * 5;
var shade = parseInt((1 - stars[i].z / 32.0) * 255);
ctx.fillStyle = "rgb(" + shade + "," + shade + "," + shade + ")";
ctx.fillRect(px,py,size,size);
}
}
}
*/
Code: Select all
shade = math.ceil(1 - stars[i].z * 255 / 32);
Code: Select all
int i, shade, px, py, size;
Code: Select all
#include "../lib/math.h"
Code: Select all
float cos(float x);
float sin(float x);
float sqrt(float x);
float tan(float x);
float abs(float x);
11.14 Встроенные в компилятор процедуры.
Для некоторых процедур Вы не найдете их исходные тексты в библиотеках
компилятора. Код этих процедур генерирует компилятор. Вот список этих
процедур:
ABORT Прекращение выполнения программы
atan Вычислить арктангенс числа
atan2 Вычислить арктангенс числа
ATEXIT Зарегистрировать функцию выполняющуюся при выходе.
cos Возвращает косинус угла
EXIT Закончить программу с кодом ошибки
exp Возвращает экспоненту числа
inp/inportb Считать один байт из порта
inport Считать слово из порта
inportd Считать двойное слово из порта
fabs Возвращает абсолютное значение числа
log Вычисляет натуральный логарифм числа
log10 Вычисляет десятичный логарифм числа
outp/outportb Записать один байт в порт
outport Записать слово в порт
outportd Записать двойное слово в порт
sin Возвращает синус угла
sqrt Извлечь квадратный корень через FPU.
tan Возвращает тангенс угла
Так я и не про тебя же На svn написано, кто автор кода. Просто он уже не в первый раз велосипед изобретаетОшибаешься, math.h писал не я.