java 反射 畫Sin、Cos函式曲線
package test; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class Test3 { String str1 = "111"; String str2 = "222"; String str3 = "333"; char[] c = {'a','b','c','d'}; public Test3(String str){ this.str3 = str; } public static void main(String[] args) { Test3 t = new Test3("333"); Class c = t.getClass(); Method[] m = c.getDeclaredMethods(); Field[] f = c.getDeclaredFields(); for(int i=0;i<f.length;i++){ if(f[i].getType()==char[].class) continue; try { //列印所有屬性值 如果是靜態屬性,可以直接用Test3.class代替 System.out.println(f[i].getName() + " " + f[i].get(t).toString()); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } for(int i=0;i<m.length;i++){ if(m[i].getReturnType()==String.class){ try { //列印所有為String的方法返回值 System.out.println(m[i].getName() + " " +m[i].invoke(t)); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } } TriFunc tri = new TriFunc(); // 生成一塊25×100的畫布 Canvas canvas = new Canvas(30, 100); // 畫sin曲線,週期為2 tri.drawSin(canvas, 2); canvas.printCanvas(); System.out.println(); canvas.reset(); // 畫cos曲線,週期為2 tri.drawCos(canvas, 2); canvas.printCanvas(); } public String getStr1() { return str1; } public String getStr2() { return str2; } public String getStr3() { return str3; } @Override public int hashCode() { final int PRIME = 31; int result = super.hashCode(); result = PRIME * result + ((str1 == null) ? 0 : str1.hashCode()); result = PRIME * result + ((str2 == null) ? 0 : str2.hashCode()); result = PRIME * result + ((str3 == null) ? 0 : str3.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (!super.equals(obj)) return false; if (getClass() != obj.getClass()) return false; final Test3 other = (Test3) obj; if (str1 == null) { if (other.str1 != null) return false; } else if (!str1.equals(other.str1)) return false; if (str2 == null) { if (other.str2 != null) return false; } else if (!str2.equals(other.str2)) return false; if (str3 == null) { if (other.str3 != null) return false; } else if (!str3.equals(other.str3)) return false; return true; } } class TriFunc { /** * 畫sin曲線 * @param canvas 畫布 * @param period 曲線週期 */ public void drawSin(Canvas canvas, double period) { char[][] chars = canvas.getCanvas(); // x 軸的比率 double xRatio = (2 * period * Math.PI) / (canvas.getWidth() - 1); // y 軸的放大倍率 int yMulti = (canvas.getHeight() - 1) / 2; for(int i = 0; i < canvas.getWidth(); i++) { // 將陣列索引對映為橫座標值 double k = (i - canvas.getWidth() / 2) * xRatio; // 將sin值對映為陣列索引 int h = yMulti - (int)Math.round(Math.sin(k) * yMulti); chars[h][i] = Canvas.FILL_CHAR; } } /** * 畫cos曲線 * @param canvas 畫布 * @param period 曲線週期 */ public void drawCos(Canvas canvas, double period) { char[][] chars = canvas.getCanvas(); double xRatio = (2 * period * Math.PI) / (canvas.getWidth() - 1); int yMulti = (canvas.getHeight() - 1) / 2; for(int i = 0; i < canvas.getWidth(); i++) { double k = (i - canvas.getWidth() / 2) * xRatio; int h = yMulti - (int)Math.round(Math.cos(k) * yMulti); chars[h][i] = Canvas.FILL_CHAR; } } } class Canvas { private int height; private int width; private char[][] canvas; // 填充字元 public static char FILL_CHAR = '#'; // 空白字元 public static char BLANK_CHAR = ' '; /** * 構建一塊畫布 * @param height * @param width */ public Canvas(int height, int width) { // 由於需要畫座標軸,所以得采用奇數 this.height = height % 2 == 0 ? height + 1 : height; this.width = width % 2 == 0 ? width + 1 : width; init(); } /** * 初始化畫布 */ private void init() { this.canvas = new char[height][width]; for(int i = 0; i < height; i++) { for(int j = 0; j < width; j++) { canvas[i][j] = BLANK_CHAR; } } addAxis(); } /** * 新增座標軸 */ private void addAxis() { // 新增橫座標 int y = height / 2; for(int x = 0; x < width; x++) { canvas[y][x] = '-'; } // 新增縱座標 int xx = width / 2; for(int yy = 0; yy < height; yy++) { canvas[yy][xx] = '|'; } // 新增原點 canvas[y][xx] = '+'; } /** * 輸出畫布 */ public void printCanvas() { for(int i = 0; i < height; i++) { for(int j = 0; j < width; j++) { System.out.print(canvas[i][j]); } System.out.println(); } } /** * 清空畫布 */ public void reset() { init(); } public int getHeight() { return height; } public int getWidth() { return width; } public char[][] getCanvas() { return canvas; } }
相關推薦
java 反射 畫Sin、Cos函式曲線
package test; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method;
IOS中正弦sin、cos等函式運算的坑
在ios中可以完全相容c的函式,所以第一步要匯入 #include <math.h> 這樣就可以使用c的一系列函數了 c中有cos,sin,tan但是我們傳入度數後都得不到想到的結果,問題是: 我們傳入的是度數,而函式所需的引數是弧度,這裡就要我們做一個度--弧度的轉換
matplotlib繪製sin、cos曲線
import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif']=['SimHei']#用來正常顯示中文標籤 plt.rcParams['axes.unicode
數學基礎知識之Sin、cos畫圓
由於在控制檯裡面畫圓的時候,SetCursorPosition該函式只接受Int型別的資料 所以位置就會四捨五入,這樣就畫的不正確 所以採用Uniyt中的2D介面繪製的 主要是鞏固math.sin
C++中tan、atan、sin、cos等三角函式用法的程式碼演示及結果,注意角度和弧度的轉換!
進行相機座標系相關公式推導時,經常碰到三角函式的使用。時間一長就生疏,碰到問題再查,很費時間。所以就總結一下,也希望能幫到更多的人。下面就通過簡練的程式碼,把常用的cos、sin、tan、atan等通過程式碼及結果都說清楚。注意弧度和角度的區別!!! 1、程式碼 #include <
正割、餘割、正弦、餘弦、正切、餘切之間的關係的公式 sec、csc與sin、cos、tan、cot之間的各種公式
1、倒數關係 tanα ·cotα=1 sinα ·cscα=1 cosα ·secα=1 2、商數關係 tanα=sinα/cosα cotα=cosα/sinα 3、平方關係 sinα²+cosα²=1 1+tanα²=secα² 1+cotα²=cscα² 4、求
java反射的工具類的函式集合
import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Modifi
大白話說Java反射:入門、使用、原理
java的反射機制就是增加程式的靈活性,避免將程式寫死到程式碼裡, 例如: 例項化一個 person()物件, 不使用反射, new person(); 如果想變成 例項化 其他類, 那麼必須修改原始碼,並重新編譯。 使用反射: class.forName
Java反射 操作Constructor、Method、Field
前面已經介紹,通過反射獲取Class中各種元素 連結:Java反射 獲取Class及Class對應資訊 看之前一定要看連結裡獲取Class對應資訊,因為有很多混淆的獲取方法 本篇是簡單介紹通過 Constructor(構造器)建立物件 Method(方法)呼叫方法 Field
pycharm中實現簡單的sin和cos函式曲線圖
1.需要下載相應的package,主要就是numpy和matplotlib;具體程式碼如下: #!/usr/bin/env python # encoding: utf-8 ''' @author: yangxin @contact: [email protect
Java的輸入和輸出、if...else if...else判斷、Java中列印陣列、Java中陣列排序、檢視函式方法的原始碼、命令列引數
Java的輸入和輸出: 輸入: import java.util.Scanner Scanner s = new Scanner(System.in); //通過new Scanner(System.in)建立一個Scanner物件,控制檯會一直等待輸入,直到敲回車鍵
Java反射之getFields()、getDeclaredFields()方法
在Java開發中,有兩種獲取欄位的方式:getFields()和getDeclaredFields()。 兩者區別: getFields():獲取某個類的所有的公共(public)的欄位,包括父類中的欄位 getDeclaredFields():獲取某個類的所有宣告的欄位,即包括publ
Java反射 操作Constructor、Method、Field以及陣列
前面已經介紹,通過反射獲取Class中各種元素 看之前一定要看連結裡獲取Class對應資訊,因為有很多混淆的獲取方法 本篇是簡單介紹通過 Constructor(構造器)建立物件 Method(方法)呼叫方法 Field(欄位)操作成員變數 Array(陣列)
使用java反射操作類的建構函式,成員變數和成員方法
在java.lang.reflect包中有三個類Field,Method,Constructor.分別描述域,方法,構造器。參考API,關於這三個類的說明。 在執行時使用反射分析物件,如果訪問的是私有域或是私有方法,私有建構函式,會丟擲IllegalAccessExce
快速sin 和 cos 函式計算
void _SSE2_SinCos(float x, float* s, float* c) // any x{__asm{ movss xmm0, x movaps xmm7, xmm0 movss xmm1, _ps_am_inv_sign_mask movss xmm2, _ps_am_
畫 Sin()函式影象
主題:畫sin(x)函式影象 java 程式碼如下: import java.awt.FlowLayout; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.eve
java反射中Parameter的getName函式如何得到引數名
如果jdk是1.8一下或者沒有設定帶引數名編譯,那麼Parameter的getName函式只會返回arg0,arg1,arg2......想要得到真正的引數名,得勾選一下帶引數名編譯的設定:這樣就ok了為什麼要勾選帶引數編譯的設定呢?想到前幾天學的詞法分析和語法分析才知道,變
Java反射列印類的資訊,包括類的成員函式、成員變數(只獲取成員函式)
import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; public class ClassUtil { /** *
Java 基礎 -- 泛型、集合、IO、反射
array ger read let input 處理 chm 媒體 files 計劃把 Java 基礎的有些部分再次看一遍,鞏固一下,下面以及以後就會分享自己再次學習的一點筆記!不是有關標題的所有知識點,只是自己覺得模糊的一些知識點。 1. 對於泛型類而言,你若沒有指明
Java反射及 IoC原理、內省機制
sso http CA truct 的區別 tps demo inf 限定 JAVA反射及IoC原理、JAVA內省 1. 反射 反射是框架設計的靈魂,使用前提:必須先得到代表的字節碼的Class,Class類用於表示.class文件(字節碼文件)。 1.1 反射概述