22 个解决方案
#1
这是代码 ,
private void button1_Click(object sender, System.EventArgs e)
{
//参考资料
// http://www.cnblogs.com/wd_318/articles/49980.html
// 一段画SIN曲线的代码
System.Drawing.Bitmap bmp = new Bitmap(400,220);
Graphics g = Graphics.FromImage(bmp);
g.FillRectangle(new SolidBrush(Color.White),0,0,400,220);
this.pictureBox1.Image = bmp;
画曲线(bmp);
}
/// <summary>
/// 画曲线
/// </summary>
/// <param name="bmp"></param>
private void 画曲线(Bitmap bmp)
{
Graphics g = Graphics.FromImage(bmp);
Pen pen = new Pen(Color.Black,1);
double x1=10;
double y1=0;
for(double x=1;x<720;x++)
{
//SIN最大值为1,而我图上用了100像素,所以有
//100/1=100 故而y要乘100;
// x/180*Math.PI 这个表达式把角度换成弧度值
double y=Math.Sin(x/180*Math.PI)*100;
//SIN值一个循环为360度,而我图上用了200像素表示,所以有:
//360/200=1.8 故而x值要除1.8
g.DrawLine(pen,(float)x1,(float)y1+110,(float)(x/1.8)+10,(float)y+110);
x1=x/1.8+10;
y1=y;
}
}
private void button1_Click(object sender, System.EventArgs e)
{
//参考资料
// http://www.cnblogs.com/wd_318/articles/49980.html
// 一段画SIN曲线的代码
System.Drawing.Bitmap bmp = new Bitmap(400,220);
Graphics g = Graphics.FromImage(bmp);
g.FillRectangle(new SolidBrush(Color.White),0,0,400,220);
this.pictureBox1.Image = bmp;
画曲线(bmp);
}
/// <summary>
/// 画曲线
/// </summary>
/// <param name="bmp"></param>
private void 画曲线(Bitmap bmp)
{
Graphics g = Graphics.FromImage(bmp);
Pen pen = new Pen(Color.Black,1);
double x1=10;
double y1=0;
for(double x=1;x<720;x++)
{
//SIN最大值为1,而我图上用了100像素,所以有
//100/1=100 故而y要乘100;
// x/180*Math.PI 这个表达式把角度换成弧度值
double y=Math.Sin(x/180*Math.PI)*100;
//SIN值一个循环为360度,而我图上用了200像素表示,所以有:
//360/200=1.8 故而x值要除1.8
g.DrawLine(pen,(float)x1,(float)y1+110,(float)(x/1.8)+10,(float)y+110);
x1=x/1.8+10;
y1=y;
}
}
#2
这是效果图
#3
这看不懂吗,根据x值,通过三角函数算出y值,就是个公式,分别求出x,y的值,然后画在bitmap上
#4
不是正弦函数吗
#5
这不就是循环x,从1到720
计算每一个x对应的y值,确定一个点(x,y)
然后每两个点之间连线
计算每一个x对应的y值,确定一个点(x,y)
然后每两个点之间连线
#6
三角函数应该知道吧
那个循环其实就是均匀取720个点,将相邻两个点应直线连起来,取的点越多(如1440,2880.。。),画的线就越光滑,
取的点越少(如180,90.。。)画的就越粗糙
那个循环其实就是均匀取720个点,将相邻两个点应直线连起来,取的点越多(如1440,2880.。。),画的线就越光滑,
取的点越少(如180,90.。。)画的就越粗糙
#7
意图我看懂了, 算法不是很懂。虽然写了注释
#8
实际上就跟你尺规作图的原理是一模一样的
曲线上有无数个点,你不可能把所有点都计算出来画上去
只能抽样,然后连线
抽样率越高,曲线就越接近真实
曲线上有无数个点,你不可能把所有点都计算出来画上去
只能抽样,然后连线
抽样率越高,曲线就越接近真实
#9
我要做一个更为复杂的,所以必须要看懂算法
#10
这有什么算法?
不就是一个sin正旋函数吗?你要是不了解三角函数,那几句话肯定说不清,你要是了解三角函数,那这段代码基本没啥算法
不就是一个sin正旋函数吗?你要是不了解三角函数,那几句话肯定说不清,你要是了解三角函数,那这段代码基本没啥算法
#11
嗯 有点明白了 我先思考思考。
#12
double y=Math.Sin(x/180*Math.PI)*100;
这不就是正弦曲线函数么
根据x计算y,有什么不懂的
这不就是正弦曲线函数么
根据x计算y,有什么不懂的
#13
三角函数我知道, sin = 对边/斜边 他这样写的 double y=Math.Sin(x/180*Math.PI)*100;
#14
至于那个除以1.8和乘以100之类的,那就更好理解了,
因为如果不这样处理画出来的图特别小(只有一个像素单位),所以他在横竖坐标上做了放大处理
因为如果不这样处理画出来的图特别小(只有一个像素单位),所以他在横竖坐标上做了放大处理
#15
正弦,余弦,勾股定理,这些不都是三角函数么....
#16
我明白了,谢谢各位。 我一直纠结于 正弦函数公式。 实际上 这是正弦曲线函数 公式 。我走错路了
#17
x/180*Math.PI是将角度转换成弧度
90度=1/2pi吧,90/180*PI=1/2PI....
90度=1/2pi吧,90/180*PI=1/2PI....
#18
正弦曲线可表示为y=Asin(ωx+φ)+k,定义为函数y=Asin(ωx+φ)+k在直角坐标系上的图象,其中sin为正弦符号,x是直角坐标系x轴上的数值,y是在同一直角坐标系上函数对应的y值,k、ω和φ是常数(k、ω、φ∈R且ω≠0)
#19
他把y放大了100倍,就是y=1时,高度其实是100
那么相应的,x轴也必须放大100倍,否则就不是等比例放大了,也不是正弦曲线了
那么相应的,x轴也必须放大100倍,否则就不是等比例放大了,也不是正弦曲线了
#20
g.DrawLine(pen,(float)x1,(float)y1+110,(float)(x/1.8)+10,(float)y+110); 里面的y+110 是什么意思。。 求解。其他的弄懂了
#21
+110是将起始点往下移110个像素,否则画到波峰时超出界面了
#22
我想问一下为什么this.picturebox1.image这句picturebox没有用
#1
这是代码 ,
private void button1_Click(object sender, System.EventArgs e)
{
//参考资料
// http://www.cnblogs.com/wd_318/articles/49980.html
// 一段画SIN曲线的代码
System.Drawing.Bitmap bmp = new Bitmap(400,220);
Graphics g = Graphics.FromImage(bmp);
g.FillRectangle(new SolidBrush(Color.White),0,0,400,220);
this.pictureBox1.Image = bmp;
画曲线(bmp);
}
/// <summary>
/// 画曲线
/// </summary>
/// <param name="bmp"></param>
private void 画曲线(Bitmap bmp)
{
Graphics g = Graphics.FromImage(bmp);
Pen pen = new Pen(Color.Black,1);
double x1=10;
double y1=0;
for(double x=1;x<720;x++)
{
//SIN最大值为1,而我图上用了100像素,所以有
//100/1=100 故而y要乘100;
// x/180*Math.PI 这个表达式把角度换成弧度值
double y=Math.Sin(x/180*Math.PI)*100;
//SIN值一个循环为360度,而我图上用了200像素表示,所以有:
//360/200=1.8 故而x值要除1.8
g.DrawLine(pen,(float)x1,(float)y1+110,(float)(x/1.8)+10,(float)y+110);
x1=x/1.8+10;
y1=y;
}
}
private void button1_Click(object sender, System.EventArgs e)
{
//参考资料
// http://www.cnblogs.com/wd_318/articles/49980.html
// 一段画SIN曲线的代码
System.Drawing.Bitmap bmp = new Bitmap(400,220);
Graphics g = Graphics.FromImage(bmp);
g.FillRectangle(new SolidBrush(Color.White),0,0,400,220);
this.pictureBox1.Image = bmp;
画曲线(bmp);
}
/// <summary>
/// 画曲线
/// </summary>
/// <param name="bmp"></param>
private void 画曲线(Bitmap bmp)
{
Graphics g = Graphics.FromImage(bmp);
Pen pen = new Pen(Color.Black,1);
double x1=10;
double y1=0;
for(double x=1;x<720;x++)
{
//SIN最大值为1,而我图上用了100像素,所以有
//100/1=100 故而y要乘100;
// x/180*Math.PI 这个表达式把角度换成弧度值
double y=Math.Sin(x/180*Math.PI)*100;
//SIN值一个循环为360度,而我图上用了200像素表示,所以有:
//360/200=1.8 故而x值要除1.8
g.DrawLine(pen,(float)x1,(float)y1+110,(float)(x/1.8)+10,(float)y+110);
x1=x/1.8+10;
y1=y;
}
}
#2
这是效果图
#3
这看不懂吗,根据x值,通过三角函数算出y值,就是个公式,分别求出x,y的值,然后画在bitmap上
#4
不是正弦函数吗
#5
这不就是循环x,从1到720
计算每一个x对应的y值,确定一个点(x,y)
然后每两个点之间连线
计算每一个x对应的y值,确定一个点(x,y)
然后每两个点之间连线
#6
三角函数应该知道吧
那个循环其实就是均匀取720个点,将相邻两个点应直线连起来,取的点越多(如1440,2880.。。),画的线就越光滑,
取的点越少(如180,90.。。)画的就越粗糙
那个循环其实就是均匀取720个点,将相邻两个点应直线连起来,取的点越多(如1440,2880.。。),画的线就越光滑,
取的点越少(如180,90.。。)画的就越粗糙
#7
意图我看懂了, 算法不是很懂。虽然写了注释
#8
实际上就跟你尺规作图的原理是一模一样的
曲线上有无数个点,你不可能把所有点都计算出来画上去
只能抽样,然后连线
抽样率越高,曲线就越接近真实
曲线上有无数个点,你不可能把所有点都计算出来画上去
只能抽样,然后连线
抽样率越高,曲线就越接近真实
#9
我要做一个更为复杂的,所以必须要看懂算法
#10
这有什么算法?
不就是一个sin正旋函数吗?你要是不了解三角函数,那几句话肯定说不清,你要是了解三角函数,那这段代码基本没啥算法
不就是一个sin正旋函数吗?你要是不了解三角函数,那几句话肯定说不清,你要是了解三角函数,那这段代码基本没啥算法
#11
嗯 有点明白了 我先思考思考。
#12
double y=Math.Sin(x/180*Math.PI)*100;
这不就是正弦曲线函数么
根据x计算y,有什么不懂的
这不就是正弦曲线函数么
根据x计算y,有什么不懂的
#13
三角函数我知道, sin = 对边/斜边 他这样写的 double y=Math.Sin(x/180*Math.PI)*100;
#14
至于那个除以1.8和乘以100之类的,那就更好理解了,
因为如果不这样处理画出来的图特别小(只有一个像素单位),所以他在横竖坐标上做了放大处理
因为如果不这样处理画出来的图特别小(只有一个像素单位),所以他在横竖坐标上做了放大处理
#15
正弦,余弦,勾股定理,这些不都是三角函数么....
#16
我明白了,谢谢各位。 我一直纠结于 正弦函数公式。 实际上 这是正弦曲线函数 公式 。我走错路了
#17
x/180*Math.PI是将角度转换成弧度
90度=1/2pi吧,90/180*PI=1/2PI....
90度=1/2pi吧,90/180*PI=1/2PI....
#18
正弦曲线可表示为y=Asin(ωx+φ)+k,定义为函数y=Asin(ωx+φ)+k在直角坐标系上的图象,其中sin为正弦符号,x是直角坐标系x轴上的数值,y是在同一直角坐标系上函数对应的y值,k、ω和φ是常数(k、ω、φ∈R且ω≠0)
#19
他把y放大了100倍,就是y=1时,高度其实是100
那么相应的,x轴也必须放大100倍,否则就不是等比例放大了,也不是正弦曲线了
那么相应的,x轴也必须放大100倍,否则就不是等比例放大了,也不是正弦曲线了
#20
g.DrawLine(pen,(float)x1,(float)y1+110,(float)(x/1.8)+10,(float)y+110); 里面的y+110 是什么意思。。 求解。其他的弄懂了
#21
+110是将起始点往下移110个像素,否则画到波峰时超出界面了
#22
我想问一下为什么this.picturebox1.image这句picturebox没有用