سلام
كاربر someone منظور شما اينه كه من polygon را رسم كنم و بعد اين تابع (boundfill )را براي پر كردن صدا بزنم؟
يعني به همين سادگي؟
باورم نميشه
Printable View
سلام
كاربر someone منظور شما اينه كه من polygon را رسم كنم و بعد اين تابع (boundfill )را براي پر كردن صدا بزنم؟
يعني به همين سادگي؟
باورم نميشه
بله.
فقط باید نقطه ای از درون polygon رو انتخاب کنین.
سلام
من كاري راكه گفتيد كردم ولي يه پيغامي مي ده كه نمي دونم از چيه
من هم كد رو مي نويسم و هم پيغام رو
كد:نگاه كنيد با اينكه من حتي درون تابع my_fill يك تابع بازگشتي هم تعريف كردهام كه سربار زياد نشود پيام زير را مي دهکد:#include<iostream.h>
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<conio.h>
#include<dos.h>
#include<graphics.h>
float points[3][13] = {{100,80,40,60,40,80,100,120,160,140,160,120,100 },{40,80,80,120,160,160,200,160,160,120,80,80,40 },{1,1,1,1,1,1,1,1,1,1,1,1,1 }};
void myline(float x1, float y1 , float x2 , float y2)
{
float y;
if ((x2-x1)==0 ||(x2<x1) ||(y2<y1)) line( x1 , y1 , x2 , y2);
else
{
float m = (y2-y1)/(x2-x1);
float b = y2-m*x2;
for (float x = x1 ; x<=x2 ; x+=0.01)
{
y = m * x +b;
putpixel(x,y,7);
}
}
}
void draw()
{
for(float a = 0 ; a<12 ; a++)
myline(points[0][a],points[1][a],points[0][a+1],points[1][a+1]);
}
void my_fill(int x, int y , int fill , int bound)
{
int cur;
cur = getpixel(x ,y);
if (cur!=bound && cur!=fill)
{
my_fill(x+1 , y , fill,bound);
}
}
void main()
{
int gd = DETECT , gm ;
initgraph(&gd , &gm , "C:\\Red\Language\\TC\\BGI");
int ec = graphresult();
if (ec !=0)
{
cout<<"Graph Error "<<grapherrormsg(ec);
getch();
exit(0);
}
draw();
while(!kbhit())
{
my_fill(50 ,50 ,14,4);
}
getch();
closegraph();
}
پيام خطا:
لطفا راهنمايي كنيد كه بايد چي كار كنم تا مشكل رفع بشه يا اينكه الگوريتم را عوض كنمکد:THE NTVDM CPU has encountered anillegal instruction
مرسي
دوباره سلام.
دلیلش VDM هست. و به خاطر استفاده از این تابع بازگشتی.
اما برنامه که به کار بردین چند مورد داره.
1- در my_fill از putpixel استفاده نکردین.
2- از این تابع در یه حلقه استفاده کردین.
3- نقطه ی انتخابی شما در درون شکل نیست! بیرون ازش هست.
4- مقادیر fill و bound درست انتخاب نشدن.
برنامه رو براتون اصلاح کردم. (اجرا هم شده)
اگه مشکلی بود اطلاع بدین.کد:
#include<iostream.h>
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<conio.h>
#include<dos.h>
#include<graphics.h>
float points[3][13] =
{{100,80,40,60,40,80,100,120,160,140,160,120,100 },
{40,80,80,120,160,160,200,160,160,120,80,80,40 },
{1,1,1,1,1,1,1,1,1,1,1,1,1 }};
void myline(float x1, float y1 , float x2 , float y2)
{
float y;
if ((x2-x1)==0 ||(x2<x1) ||(y2<y1))
line( x1 , y1 , x2 , y2);
else
{
float m = (y2-y1)/(x2-x1);
float b = y2-m*x2;
for (float x = x1 ; x<=x2 ; x+=0.01)
{
y = m * x +b;
putpixel((int)x,(int)y,15);
}
}
}
void draw()
{
for(float a = 0 ; a<12 ; a++)
myline(points[0][a],points[1][a],
points[0][a+1],points[1][a+1]);
}
void my_fill(int x, int y , int fill , int bound,int i)
{
int cur;
cur = getpixel(x ,y);
if (cur!=bound && cur!=fill)
{
putpixel(x,y,fill);
my_fill(x+i , y , fill,bound,i);
my_fill(x , y-1 , fill,bound,i);
my_fill(x , y+1 , fill,bound,i);
}
}
void main()
{
int gd = DETECT , gm ;
initgraph(&gd , &gm , "C:\\Red\Language\\TC\\BGI");
int ec = graphresult();
if (ec !=0)
{
cout<<"Graph Error "<<grapherrormsg(ec);
getch();
exit(0);
}
draw();
my_fill(100,50,15,15,-1);
my_fill(101,50,15,15,1);
getch();
closegraph();
}
salam man ye karbar jadidam mitoni b manam komak koni?????man dar rabete ba inke ba estefade az khat eskan ye sheklo por konam moshkel daram algoritmesho mikham lotfan komakam konid harche zodtar mamnon:n03: