PDA

View Full Version : درخواست یه ترفند کوچک در مورد گرافیک های #c



hosseinghaheri
پنج شنبه 26 آذر 1394, 14:46 عصر
سلام خدمت تمامی دوستان!
یه نگاه به تصویر زیر بندازید!

http://up.hgdownloadcenter.ir/view/1054654/Untitled.png

این خط های رنگی که تقریبا مثل مثلث هستند طبق یه فرمولی تکرار میشند!
حالا توی بعضی مواقع مثلا خط رفت یک مثلث از شیار 17 و برگشتش طبق همون فرمول ها توی شیار 20 میشه!
ولی من اینجا شیار 20 ندارم و باید اون رو از شیار 2 برگردونم!
من خیلی سعی کردم با فرمول های خودش اون را روی شیار 2 برگردونم ولی همون طور که میبینید خط مثلثی که از شیار 17 شروع شده ، دقیقا روی شیار 2 برنگشته!
حالا سوالم اینه که توی سی شارپ تابع یا کلاسی هست که بتونم قسمتی از یک گرافیک که از محدودش بیرون میزنه را ، از نقطه اول شروع به رسمش کنم؟؟؟؟
ممنون میشم راهنمایی کنید!

reza_ali202000
یک شنبه 06 دی 1394, 22:58 عصر
سلام
دوست عزیز دقیقا خروجی که نیاز دارید همین شکل هست یا فرضا برا کار با سخت افزار خاصی میخاید این کار رو کنید.
منظورم اینه که فقط از لحاظ پیکسلی بحث بشه یا از لحاظ ساختاری.
اگه پیکسلی هست که میتونید با کم و زیاد کردن تعداد پیکسلایی که به اخر رسیده اون رو درست کنید ولی اگه ساختاری هست باید مشخص بشه از چه فرمولهایی استفاده میشه. و آیا صفحه مورد نظر استاندارد هست یا خیر.

hosseinghaheri
چهارشنبه 16 دی 1394, 14:56 عصر
سلام!
از لحافظ ساختاری مشکلی نیست چون کاربر وقتی شکل را ببین خودش میفهمه قضیه چیه ولی خوب چون خط کشی ها درست نیست یکم دیاگرام را خراب میکنه!
در مورد کم و زیاد کردن پیکسل ها باید بگم که این اولین چیزی بود که بهش فک کردم.
ولی به هر نحوی خواستم انجامش بدم نشد!
مثلا به عواملی مثل سایز صفحه و یه سری چیزه دگ که مربوط به فرمول ها میشه بستگی داره!
این عوامل هم همون چور که خودتون میدونید همیشه ثابت نیستند و ممکنه تغییر کنند!
من چند ضابطه واسش نوشتم که طبق اون خطوط اضافه سمت راست به سمت چپ منتقل کنه!
ولی در اکثر حالت ها جواب نداد! البته باید اینم بگم که این ضابطه ها روی کاغذ و بصورت تعوری کاملا درست بود!
واسه همین به این فکر افتادم که شاید تابعی از طرف خوده کلاس گرافیک ها وجود داشته باشه تا با اون بتونم اگه یه گراف از طول معینش بیشتر شد ، تا جاییش که امکان داره را رسم کنه و بقیش را از اولین پیکس ادامه بده!
خودم چنین تابعی نوشتم و در حالت های عادی (exampl pro) جواب میده ولی باز روی این پروژه جواب نمیده!


ممنون از راهنماییتون!

reza_ali202000
یک شنبه 20 دی 1394, 15:58 عصر
دوست عزیز فقط سورس مربوط به رسم رو اگه امکانش هست بزارید تا بتونم راهنماییتون کنم.

hosseinghaheri
چهارشنبه 23 دی 1394, 21:50 عصر
قسمتی مربوط رسم خطوط هست را داخل کد زیر مشخص کردم




using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication3
{
public partial class Form1 : Form
{
int a, b, c, d,q,aez,u,v,w;
int ma,y,yk,x,ux,vx,wx,xb,xo;
int yp,z,pp,m,f,ns,ysm;
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
y = 250;
yk = 80;
yk = y - yk;
ysm = 40;
ysm += y;

z = 18;
m = 3;
f = 50;
ns = 1000;

//z = 24;
//m = 3;
//f = 50;
//ns = 1500;

z = 36;
m = 3;
f = 50;
ns = 1500;

//z = 12;
//m = 3;
//f = 50;
//ns = 1500;

pp = (60 * f) / ns;
yp = z / (2 * pp);
q = yp / m;
aez = (pp * 360) / z;
u = 1;
v = (1 + 120) / aez;
w = (1 + 240) / aez;

int[] az = new int[200];
a = this.Size.Width;
a /= 2;
a -= 20;
a /= z / 2;
xo = panel1.Size.Width - (20+(a*z));

ma = yp * a / 2;
xb = w - v;
vx = xb * a;
wx = xb * 2 * a;
Graphics g = panel1.CreateGraphics();
Label[] lb = new Label[200];
Pen pb = new Pen(Color.Black, 2);
Pen pr = new Pen(Color.Red, 2);
Pen pg = new Pen(Color.Green, 2);
Pen pbl = new Pen(Color.Blue, 2);


for (int i = 0; i < z; i++)// slots
{
//az[i] = 60 + a * i;
az[i] = 20 + a * i;
g.DrawLine(pb, az[i], y, az[i], y+30);
lb[i]=new Label();
lb[i].Text = (i+1).ToString();
lb[i].ForeColor = Color.Black;
lb[i].Location = new Point(Convert.ToInt32(az[i]-8), Convert.ToInt32(y + 10));
lb[i].AutoSize = true;
panel1.Controls.Add(lb[i]);
}

for (int i = 0; i < z; i+=yp*2)// U
{ int ys=ysm;
for (int ii = 0; ii < q; ii++)
{
int ie=-yp;
ie += yp;
g.DrawLine(pbl, (ii * a) + az[i], y, (ii * a) + (az[i] + ma), yk);
g.DrawLine(pbl, (ii * a) + (az[i] + (2 * ma)), y, (ii * a) + ((az[i] - ma) + (2 * ma)), yk);
//g.DrawLine(pbl,(ii * a) + ((az[i] - ma) + (2 * ma))+ma,y+30,(ii * a) + ((az[i] - ma) + (2 * ma))+ma,ys); ys += ys/q/6;
//g.DrawLine(pbl, (ii * a) + ((az[i] - ma) + (2 * ma)) + ma, y + 30 + ys, (ii * a) + ((az[i] - ma) + (2 * ma)) + ma + y + 30 + ys+(yp * a), y + 30 + ys);
}

}

for (int i = 0; i < z; i += yp * 2)// v
{
for (int ii = 0; ii < q; ii++)
{
int ie = -yp;
ie += yp;
g.DrawLine(pr, vx + (ii * a) + az[i], y, vx + (ii * a) + (az[i] + ma), yk);
g.DrawLine(pr, vx + (ii * a) + (az[i] + (2 * ma)), y, vx + (ii * a) + ((az[i] - ma) + (2 * ma)), yk);
}

}

for (int i = 0; i < z; i += yp * 2)// w
{
for (int ii = 0; ii < q; ii++)
{
int ie = -yp;
ie += yp;


int x1 = wx + (ii * a) + (az[i] + (2 * ma));
int x2= wx + (ii * a) + ((az[i] - ma) + (2 * ma));


//این قسمت مربوط به برشگت خطوط است
if (x1 + 20 + ma >= panel1.Size.Width)
{

x1 = x1 + 20 - xo - panel1.Size.Width;
x2 = x2 + 20 - xo - panel1.Size.Width;
//MessageBox.Show(x2.ToString()+" "+a.ToString());
//x2 = z - (x2 / a) - (1 / 2);
//MessageBox.Show(x2.ToString() + " " + a.ToString());
//x2 = (ii * a) + ((az[x2] - ma) + (2 * ma));
//MessageBox.Show(x2.ToString() + " " + a.ToString());
//x1 = x2 + ma;

//x2 = x2+a - panel1.Size.Width;
//x1 = x1+a - panel1.Size.Width;

}

g.DrawLine(pg, wx + (ii * a) + az[i], y, wx + (ii * a) + (az[i] + ma), yk);
g.DrawLine(pg, x1, y, x2, yk);
}

}

//for (int i = 0; i < z; i+=2*pp)// V
//{
// g.DrawLine(pr, vx + az[i], y, vx + (az[i] + ma), yk);
// g.DrawLine(pr, vx + (az[i] + (2 * ma)), y, vx + ((az[i] - ma) + (2 * ma)), yk);
//}
//for (int i = 0; i < z; i += 2 * pp)// W
//{
// g.DrawLine(pg, wx + az[i], y, wx + (az[i] + ma), yk);
// g.DrawLine(pg, wx + (az[i] + (2 * ma)), y, wx + ((az[i] - ma) + (2 * ma)), yk);
//}
}

private void Form1_Load(object sender, EventArgs e)
{

}

private void Form1_Click(object sender, EventArgs e)
{
this.Refresh();
}

private void panel1_Paint(object sender, PaintEventArgs e)
{

}
}
}

reza_ali202000
پنج شنبه 24 دی 1394, 02:33 صبح
سلام دوست عزیز
بالاخره تونستم بعد از کلی کلنجار درستش کنم.
امیدوارم بدردتون بخوره.

hosseinghaheri
یک شنبه 27 دی 1394, 23:29 عصر
به شدت ممنونم!
عالی بود

reza_ali202000
یک شنبه 27 دی 1394, 23:40 عصر
البته به نظرم هنوز باگهایی داره.
فقط اونجایی رو درست کردم که مشکل داشتین. شرطی که گذاشتین فقط شامل خط اول میشه که اگه به اخر برسه. ولی اگه مثلا وسطای خط دوم به اخر برسه شرط نزاشته بودین که اونو دیگه به نظرم بتونید بزارید.