精华内容
下载资源
问答
  • java swing绘制正弦曲线

    2009-10-12 23:17:33
    一个用swing绘制sin曲线的小程序 供初学者借鉴借鉴
  • Java中没有自带正弦曲线的函数,需要自己绘制。 用无数个小线段来组成弯曲的正弦曲线。 定义三个变量: ` int grain = 3; //控制正弦曲线的粒度(粒度越大,像素越低) int range = 50; //高度 int period = 100; ...

    Java中没有自带正弦曲线的函数,需要自己绘制。
    用无数个小线段来组成弯曲的正弦曲线。

    定义三个变量:
    `   int grain = 3;    //控制正弦曲线的粒度(粒度越大,像素越低)
    	int range = 50;    //高度
    	int period = 100;   //周期
    

    创建微调控制器JSpinner来控制正弦曲线

    //JSpinner的语法格式:SpinnerNumberModel(最低值,初值,最大值,步长)
    JSpinner grainField  = new JSpinner(new SpinnerNumberModel(1, 1, 10, 1));
    	JSpinner rangeField = new JSpinner(new SpinnerNumberModel(50, 20, 80, 5));
    	JSpinner periodField = new JSpinner(new SpinnerNumberModel(100, 50, 150, 10));
    
    //向control添加几个控件
    		control.add(new JLabel("粒度"));
    		control.add(grainField,"80px");
    		control.add(new JLabel("高度"));
    		control.add(rangeField,"80px");
    		control.add(new JLabel("周期"));
    		control.add(periodField,"80px");
    		control.add(Box.createHorizontalGlue());
    

    简化代码创建一个createUI方法来处理微调的响应

    private void createUI() {
    		p.grain = (Integer)grainField.getValue();
    		p.period = (Integer) periodField.getValue();
    		p.range = (Integer)rangeField.getValue();
    		p.repaint();   //重画方法,可以及时响应调整的事件
    	}
    

    新建changeLinstener事件处理来调用createUI方法

    		ChangeListener changeLinstener = new ChangeListener() {
    			
    			@Override
    			public void stateChanged(ChangeEvent e) {
    				// TODO Auto-generated method stub
    			createUI();	
    			}
    		};
    		grainField.addChangeListener( changeLinstener);
    		rangeField.addChangeListener( changeLinstener);
    		periodField.addChangeListener( changeLinstener);
    	}
    

    正弦曲线的绘制(需要重写JComponent中的paintComponent方法)

    @Override
    	protected void paintComponent(Graphics g) {
    		//
    		int width = this.getWidth();  
    		int height = this.getHeight();
    		//
    		g.clearRect(0, 0, width,height);//清空绘制的形状
    		g.setColor(Color.white);     //设置颜色
    		
    		//绘制中线
    		int center = height/2;
    		g.setColor( Color.blue);
    		g.drawLine(0, center,width,center);
    		//绘制矩形的灵魂
    		int x1 = 0;int y1 = 0;
    		for(int i =0;i<width ; i+=grain) {
    			int x2=i;
    			int y2 = (int)(range*Math.sin(2*Math.PI*i/period));
    			g.drawLine(x1,center+y1,x2,center+y2);
    			x1=x2;
    			y1=y2;
    			//
    		}
    	}
    
    展开全文
  • 用小程序画得正弦曲线,简短易懂,居家必备。
  • Android利用SurfaceView绘制正弦曲线

    千次阅读 2016-05-26 16:32:45
    今天在看canvas的时候想起能不能绘制一下正弦曲线,查了下资料,用SurfaceView可以完成。在开始之前需要准备两点: 正弦的数学公式:y=sinX,在JAVA中是Math.sin(rad)方法,其中参数rad的单位是弧度,因此引出下一个...

    今天在看canvas的时候想起能不能绘制一下正弦曲线,查了下资料,用SurfaceView可以完成。在开始之前需要准备两点:

    1. 正弦的数学公式:y=sinX,在JAVA中是Math.sin(rad)方法,其中参数rad的单位是弧度,因此引出下一个问题:角度与弧度的转换。
    2. 角度与弧度的转换:

    角(弧度)=弧长/半径
    圆的周长是半径的 2π倍,所以一个周角(360度)是 2π弧度。
    半圆的长度是半径的 π倍,所以一个平角(180度)是 π弧度。
    据上所述,一个平角是 π 弧度。即 180度=π弧度
    由此可知:
    1度=π/180 弧度 ( ≈0.017453弧度 )
    因此,得到 把度化成弧度的公式:
    弧度=度×π/180

    关于角度和弧度的转换请看链接:角度与弧度的转换

    下面代码开始:
    首先声明类需要继承SurfaceView并且实现SurfaceHolder.Callback接口:

    public class SinCurveLine extends SurfaceView implements SurfaceHolder.Callback{
    
    }

    然后编写角度转换成弧度的方法:

         /**
         * 角度转换成弧度
         * @param degree
         * @return
         */
        private double degreeToRad(double degree){
            return degree * Math.PI/180;
        }

    最后在SurfaceHolder.Callback的surfaceCreated方法中完成绘制。附上全部代码:

    package org.media.view;
    
    import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.util.AttributeSet;
    import android.util.Log;
    import android.view.SurfaceHolder;
    import android.view.SurfaceView;
    
    /**
     * 绘制正弦曲线
     *
     */
    public class SinCurveLine extends SurfaceView implements SurfaceHolder.Callback{
    
        private static final String TAG = "SinCurveLine";
    
        Paint paint;
        int x = 0;
        SurfaceHolder surfaceHolder;
        Canvas canvas;
    
        public SinCurveLine(Context context) {
            this(context, null);
            Log.d(TAG, "SinCurveLine");
        }
    
        public SinCurveLine(Context context, AttributeSet attrs) {
            this(context, attrs, 0);
        }
    
        public SinCurveLine(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
            surfaceHolder = getHolder();
            surfaceHolder.addCallback(this);
        }
    
        private void init(){
            paint = new Paint();
            paint.setColor(Color.RED);
            paint.setStrokeWidth(1);
            paint.setStyle(Paint.Style.FILL);
        }
    
        /**
         * 角度转换成弧度
         * @param degree
         * @return
         */
        private double degreeToRad(double degree){
            return degree * Math.PI/180;
        }
    
        @Override
        public void surfaceCreated(SurfaceHolder holder) {
            Log.d(TAG,"surfaceCreated");
            init();
            final int width = getWidth();
            int height = getHeight();
            final int centerY = height/2;
            canvas = surfaceHolder.lockCanvas();
            canvas.drawColor(Color.WHITE);
            paint.setTextSize(30);
            canvas.drawText("X", 5, 25, paint);
            canvas.drawText("Y",5,centerY+25,paint);
            canvas.drawLine(0, centerY, width, centerY, paint);//在屏幕中心绘制x轴
            canvas.drawLine(0, 0, 0, height, paint);//绘制Y轴
            while (x < width) {
                paint.setColor(Color.BLUE);
                paint.setStrokeWidth(5);
                double rad = degreeToRad(x);//角度转换成弧度
                int y = (int) (centerY - Math.sin(rad)*100);
                canvas.drawPoint(x,y,paint);
                x++;
                /*canvas.drawLine(centerX,centerY,x,y,paint);
                preX = x;
                preY = y;
                * 打开注释,运行代码,会看到意外图形
                */
            }
            surfaceHolder.unlockCanvasAndPost(canvas);
        }
    
        @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
    
        }
    
        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {
    
        }
    }
    

    效果图:
    正弦曲线

    展开全文
  • 代码如下:/** 绘制0°到360°的正弦曲线* 分两种情形,y>0和y<=0进行绘制* 每种情形中要考虑每行打印两个"*"字符* 并在打印第二个"*"字符后换行*/package hundred;import java.lang.Math;public class SinTest...

    代码如下:

    /*

    * 绘制0°到360°的正弦曲线

    * 分两种情形,y>0和y<=0进行绘制

    * 每种情形中要考虑每行打印两个"*"字符

    * 并在打印第二个"*"字符后换行

    */

    package hundred;

    import java.lang.Math;

    public class SinTest {

    public static void main(String[] args){

    //y为列方向,值从1到-1,步长为0.1

    for (double y = 1;y>=-1;y-=0.1){

    //计算出y对应的弧度,乘10为图形放大倍数

    int m = -(int)(Math.asin(y)*10);

    if (y > 0){

    for (int x = 1;x <1-m;x++){

    System.out.print(" ");

    }

    System.out.print("*");

    //31为10*π的整数部分,打印出来的曲线比较顺眼

    for (int x =1;x <31+2*m;x++){

    System.out.print(" ");

    }

    System.out.println("*");

    }

    if (y <= 0){

    for (int x = 1;x < 32+m;x++){

    System.out.print(" ");

    }

    System.out.print("*");

    //31为10*π的整数部分,打印出来的曲线比较顺眼

    for (int x = 1;x < 31-2*m;x++){

    System.out.print(" ");

    }

    System.out.println("*");

    }

    }

    }

    }

    1-191116141002441.jpg

    展开全文
  • 由上一篇 趣味编程 - 绘制余弦曲线 思考正弦曲线绘制. 分析: 正弦曲线刚好是余弦曲线关于x轴翻转后的图形.图形的横坐标取值范围x∈(-180°,180°] 不过此时的图形不是常规的正弦形状. 算法: 将上一篇 ...

     

    问题:

    由上一篇 趣味编程 - 绘制余弦曲线 思考正弦曲线的绘制.


    分析: 正弦曲线刚好是余弦曲线关于x轴翻转后的图形.图形的横坐标取值范围x∈(-180°,180°]

    不过此时的图形不是常规的正弦形状.


    算法: 将上一篇 趣味编程 - 绘制余弦曲线 中实现程序for(Y=10; Y>=-10; Y--) 换成for(Y=-10; Y<10; Y++)


    实现程序

     

    /*
    @TODO 绘制正弦曲线 
    @author jarg
    http://jarg.iteye.com/
    */
    
    import static java.lang.System.*;
    import static java.lang.Math.*;
    
    public class SIN
    {
    	private static final int MULTI = 12;					// 图形放大倍数
    	private static final int LEN = (int)(acos(-1)*MULTI)*2;	// 图形横坐标长度
    	private static int X;									// 横坐标
    	private static int Y;									// 纵坐标
    
    	public static void main(String[] args)
    	{
    		display();
    	}
    
    	public static void display()
    	{
    		for(Y=-10; Y<10; Y++)
    		{
    			X = (int)(acos((double)Y/10)*MULTI);
    			for(int m=0; m<X; m++)
    			{
    				out.print(" ");
    			}
    			out.print("*");
    			for(int n=X; n<LEN-X; n++)
    			{
    				out.print(" ");
    			}
    			out.println("*");
    		}
    	}
    }
    
     

      


     

     

    实现程序②

     

    分析: 分二种情况,将Y值大于等于0与小于0的图形分开输出.上一图形的横坐标取值范围x∈(-180°,180°],而现在输出图形的横坐标取值范围x∈(0°,360°]

     

    算法: 定义一个flag标记,当Y<0时,将X坐标向右移动半个长度的图形横坐标总长度.

     

    /*
    @TODO 绘制正弦曲线2 
    @author jarg
    http://jarg.iteye.com/
    */
    
    import static java.lang.System.*;
    import static java.lang.Math.*;
    
    public class SIN2
    {
    	private static final int MULTI = 12;					// 图形放大倍数
    	private static final int LEN = (int)(acos(-1)*MULTI)*2;	// 图形横坐标长度
    	private static int X;									// 横坐标
    	private static int Y;									// 纵坐标
    
    	public static void main(String[] args)
    	{
    		display();
    	}
    
    	public static void display()
    	{
    		int flag = 0;			//	为了在Y负坐标情况,输出位置右移LEN/2
    		for(Y=10; Y>=-10; Y--)
    		{
    			flag = (Y<0)?1:0;
    
    			/* 由于Y<0时asin值为负,所以应当取其绝对值 */
    			X = abs((int)(asin((double)Y/10)*MULTI)) + flag*LEN/2;
    			for(int m=0; m<X; m++)
    			{
    				out.print(" ");
    			}
    			out.print("*");
    			for(int n=X+1; n<LEN/2 - X + LEN*flag; n++)
    			{
    				out.print(" ");
    			}
    			out.println("*");
    		}
    	}
    }
    

     

     


    展开全文
  • 看这一篇时如果不会绘制正弦/余弦曲线可以先看看这一篇哦:控制台绘制正弦/余弦曲线 那么,如果想要同时显示的话,我们可能需要在同一行中绘制出3个或者4个点了。我的思路比较简略,不过算法看上去非常非常不整洁,...
  • Java】 作业题 8.8 编写一个程序,利用GeneralPath绘制一个正弦曲线和余弦曲线,范围为0-360° 【解题思路】 利用y=sin(x)和y=cos(x)函数,x取值范围0-360°。 要注意细节,绘图中纵坐标方向是朝下的,所以函数中...
  • JAVA Applet——绘制心形曲线

    千次阅读 2018-10-09 15:34:00
    绘制心形曲线 1.要求 非常有名的笛卡尔曲线数学公式:(x2+y2−2ax)2=4a2(x2+y2)(x^{2}+y^{2}-2ax)^{2}=4a^{2}(x^{2}+y^{2})(x2+y2−2ax)2=4a2(x2+y2) 即心形曲线,本例通过Applet绘制出笛卡尔曲线。 2....
  • java曲线绘制程序工程

    2011-06-16 09:53:27
    java曲线绘制程序工程 可以绘制 贝塞尔曲线 NURBS 曲线和其他很多曲线的源代码程序工程,你自己慢慢看吧!
  • * 绘制0°到360°的正弦曲线 * 分两种情形,y>0和y进行绘制 * 每种情形中要考虑每行打印两个"*"字符 * 并在打印第二个"*"字符后换行 */ import java.lang.Math; public class SinTest { public static void ...
  • //windows API写过滚动正弦曲线,感觉用java做起来代码会比较小,试了一下,但感觉 //面不如windows好. import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.Timer; ...
  • @Override public void run() { // TODO Auto-generated method stub while (isRun) { angle++; if (angle == 360) { angle = 0; } ... Thread.sleep(1);... } catch (InterruptedException e) { ...
  • 使用SurfaceView实现正弦余弦曲线绘制动画! 主要代码如下: 1 package com.example.surfaceviewtest; 2 3 import java.util.Timer; 4 import java.util.TimerTask; 5 6 import android.app....
  • swing 描绘正弦曲线

    千次阅读 2010-04-19 16:39:00
    import java.awt.BorderLayout;import java.awt.Color;import java.awt.Graphics;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JSlider;import javax.swing.event.ChangeEv
  • 利用Android的Canvas绘制正弦函数图像

    千次阅读 2013-11-15 20:14:54
    一时兴起用android原生的基础绘制工具,绘制了一个正弦(余弦)函数图象,不多说,先上图: MainView.java类 package com.zhaofeng.main; import javax.crypto.SealedObject; import android.app.Activity; ...
  • 如何画正弦曲线

    千次阅读 2011-03-11 21:00:00
    import java.util.Timer; import java.util.TimerTask; import android.app.Activity; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import ...
  • 控制台输出正弦曲线

    2009-11-03 11:01:00
    c代码: // Test1.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include &lt;stdio.h&gt; #include &lt;math.h&gt; #define PAI 3.1415926 ...y=...
  • Android调用OpenGL绘制曲线入门手册

    千次阅读 2018-04-18 10:15:19
    Android调用OpenGL绘制曲线入门手册 Android OpenGL...本手册针对采用jni接口实现java调用C++代码完成OpenGL在Android中的曲线绘制做了详细流程介绍,最终实现效果为在Android平台绘制正弦曲线。 撰写人:武斌(1...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 919
精华内容 367
关键字:

java绘制正弦曲线

java 订阅