您的位置:首页 > 编程语言 > Java开发

Java中使用三角函数

2016-09-21 16:04 447 查看
通过一个简单的demo,学习三角函数的简单使用

注:使用三角函数的时候,不要直接Math.sin(x),这样是不对的,或者说,你传的30度,进去就不是30度了。要经过转换。详见代码

画一个播放用的view(一个圆,中间一个三角形)

1、效果图:



2、计算三角形坐标(拍的照片,有点模糊)



3、代码:

PlayIconView

package com.chen.demo;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;

public class PlayIconView extends View {

//圆的画笔
private Paint circlePaint;

//圆的边
private Paint strokePaint;

private int view_width;
private int view_height;

//三角形左上角点坐标
private double point_1_x;
private double point_1_y;

//三角形右下角点坐标
private double point_2_x;
private double point_2_y;

//三角形右侧点坐标
private double point_3_x;
private double point_3_y;

private Paint trianglePaint;

private Path trianglePath;

public PlayIconView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}

public PlayIconView(Context context) {
super(context);
init();
}

public PlayIconView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
Log.e("chen", "onSizeChanged");
view_width = w;
view_height = h;

calculateCoordinate();

}

/**
* 计算坐标
*/
private void calculateCoordinate() {

point_1_x = (1 / 2d - 1 / (4 * Math.tan(60 * Math.PI / 180))) * view_width;
point_1_y = view_width / 4d;

point_2_x = point_1_x;
point_2_y = view_width * 3 / 4d;

point_3_x = (1 / 2d + 1 / (4 * Math.sin(60 * Math.PI / 180))) * view_width;
point_3_y = view_height / 2d;

trianglePath.moveTo((float) point_1_x, (float) point_1_y);
trianglePath.lineTo((float) point_2_x, (float) point_2_y);
trianglePath.lineTo((float) point_3_x, (float) point_3_y);
trianglePath.close();

}

/**
* 初始化
*/
private void init() {

//背景圆画笔
circlePaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG);
circlePaint.setStyle(Paint.Style.FILL);
circlePaint.setColor(0x33000000);

//圆边画笔
strokePaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG);
strokePaint.setStyle(Paint.Style.STROKE);
strokePaint.setStrokeWidth(1);
strokePaint.setColor(0xccffffff);

//三角形画笔
trianglePaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG);
trianglePaint.setStyle(Paint.Style.FILL);
trianglePaint.setColor(0xffffffff);

//闭合区间路径
trianglePath = new Path();

}

@Override
protected void onDraw(Canvas canvas) {

canvas.drawCircle(view_width / 2f, view_height / 2f, view_width / 2f, circlePaint);
canvas.drawCircle(view_width / 2f, view_height / 2f, view_width / 2f - 1, strokePaint);

canvas.drawPath(trianglePath, trianglePaint);

}
}


4、布局文件中使用:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/ic_launcher"
>

<com.chen.demo.PlayIconView
android:id="@+id/play_icon"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_centerInParent="true"
/>

</RelativeLayout>


5、Activity:

package com.chen.demo;

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;

public class MainActivity extends Activity {

private PlayIconView play_icon;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);

play_icon = (PlayIconView) findViewById(R.id.play_icon);

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: