精华内容
下载资源
问答
  • 先来看效果(效果不全,所有的点都可以圆的半径可以变化) 直接来代码吧 (图片资源自己添加)复制即可看到效果 import android.content.Context; import android.graphics.Bitmap; import android....

    先来看效果(效果不全,所有的点都可以动,圆的半径也可以变化)

    直接来代码吧 (图片资源自己添加)复制即可看到效果

    import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.DashPathEffect;
    import android.graphics.Paint;
    import android.graphics.Path;
    import android.graphics.PathEffect;
    import android.graphics.Rect;
    import android.support.annotation.Nullable;
    import android.util.AttributeSet;
    import android.util.Log;
    import android.view.MotionEvent;
    import android.view.View;
    
    import java.util.ArrayList;
    
    public class MyView extends View {
    
        private int width;
        private int height;
    
        private ArrayList<int[]> list;
        private Bitmap[] bitmaps;
        private ArrayList<Integer> delyList;
    
    
        //绘制背景图片
        private Bitmap bitmap;
        private Bitmap pic1;
        private Bitmap pic2;
        private Bitmap pic3;
        private Bitmap pic4;
        private Bitmap pic5;
        private Bitmap pic6;
        private Bitmap pic7;
    
    
        public MyView(Context context) {
            super(context);
            init();
        }
    
        public MyView(Context context, @Nullable AttributeSet attrs) {
            super(context, attrs);
            init();
        }
    
        public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
    
            init();
        }
    
        private void init() {
            //绘制背景图片
            bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.car_topview_full);
    
            bitmaps = new Bitmap[]{
                    pic1 = BitmapFactory.decodeResource(getResources(), R.mipmap.pople),
                    pic2 = BitmapFactory.decodeResource(getResources(), R.mipmap.cirl),
                    pic3 = BitmapFactory.decodeResource(getResources(), R.mipmap.cirl),
                    pic4 = BitmapFactory.decodeResource(getResources(), R.mipmap.cirl),
                    pic5 = BitmapFactory.decodeResource(getResources(), R.mipmap.cirl),
                    pic6 = BitmapFactory.decodeResource(getResources(), R.mipmap.cirl),
                    pic7 = BitmapFactory.decodeResource(getResources(), R.mipmap.cirl)
            };
            list = new ArrayList();
    
            /*int[] f1 = new int[]{getWidth() / 4 + 75, getHeight() / 8 + 75, getWidth() * 3 / 4 - 150 + 75, getHeight() / 8 + 75};
            int[] f2 = new int[]{getWidth() / 4, getHeight() / 8, getWidth() / 4 + 150, getHeight() / 8 + 150};*/
    
            int[] f1 = new int[]{500, 500};//中心
            int[] f2 = new int[]{700, 700};
            int[] f3 = new int[]{800, 800};
            int[] f4 = new int[]{800, 800};
            int[] f5 = new int[]{300, 300};
            int[] f6 = new int[]{200, 200};
            int[] f7 = new int[]{100, 100};
    
    
            list.add(f1);
            list.add(f2);
            list.add(f3);
            list.add(f4);
            list.add(f5);
            list.add(f6);
            list.add(f7);
    
            delyList = new ArrayList<>();
    
        }
    
    
        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    
    
        }
    
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
    
    
            canvas.drawColor(Color.BLACK);
    
            Paint paint = new Paint();
    
    
            Rect src = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
            // 指定图片在屏幕上显示的区域
            Rect dst = new Rect(getWidth() / 4, getHeight() / 8, getWidth() * 3 / 4, getHeight() * 7 / 8);
            // 绘制图片
            canvas.drawBitmap(bitmap, src, dst, null);
    
            int maxRadus = calcCircleRadius(list);
    
            //画虚线
            calcPoint(canvas, paint, list, maxRadus);
    
            //画点间的实线
            paint.setColor(Color.RED);
            paint.setStrokeWidth(10);
            paint.setAntiAlias(true);
            for (int i = 1; i < list.size(); i++) {
                drawLie(canvas, paint, list.get(i));
            }
    
            //画各点的图
            for (int i = 0; i < list.size(); i++) {
                drawBitmap(canvas, list.get(i), bitmaps[i]);
            }
    
            //画文字
    
            paint.setColor(Color.BLACK);
            paint.setStrokeWidth(5);//设置画笔宽度
            paint.setAntiAlias(true);//设置是否使用抗锯齿功能,如果使用,会导致绘图速度变慢
            paint.setStyle(Paint.Style.FILL);//设置绘图样式,对于设置文字和几何图形都有效,可取值有三种 :1、Paint.Style.FILL:填充内部 2、Paint.Style.FILL_AND_STROKE:填充内部和描边 3、Paint.Style.STROKE:仅描边
            paint.setTextAlign(Paint.Align.CENTER);//设置文字对齐方式
            paint.setTextSize(50);//设置文字大小
    
            for (int i = 1; i < delyList.size(); i++) {
                drawText(canvas, paint, String.valueOf(maxRadus - delyList.get(i)), list.get(i));
            }
    
    
            // 虚线圆
            paint.setColor(Color.BLUE);
            paint.setStyle(Paint.Style.STROKE);
            //设置虚线
            PathEffect dashPathEffect = new DashPathEffect(new float[]{5, 5}, 1);
            paint.setPathEffect(dashPathEffect);
            canvas.drawCircle(list.get(0)[0] + 75, list.get(0)[1] + 75, maxRadus, paint);
    
        }
    
    
        private void drawText(Canvas canvas, Paint paint, String text, int[] arr) {
    
            canvas.drawText(text, arr[0] + 75, arr[1] + 100, paint);
           /* if (arr[0] < getWidth() / 3) {
                canvas.drawText("hello", arr[0]+75 , arr[1]+75, paint);
    
            } else if (arr[0] > (getWidth() * 2 / 3)) {
    
                canvas.drawText("hello", arr[0]+75 , arr[1]+75, paint);
            } else {
    
            }*/
    
        }
    
        /**
         * 绘制实线延长线的虚线部分
         *
         * @param canvas
         * @param paint
         * @param list
         * @param radius
         */
        private void calcPoint(Canvas canvas, Paint paint, ArrayList<int[]> list, double radius) {
    
    
            for (int i = 1; i < list.size(); i++) {
    
    
                int x = (list.get(i)[0] + 75) - (list.get(0)[0] + 75);
                int y = (list.get(i)[1] + 75) - (list.get(0)[1] + 75);
                double radus = (int) Math.sqrt(x * x + y * y);
                //计算半径和点到圆心距离的比例
                double bili = radius / radus;
    
                //根据比例就可以知道坐标的比例
                //距离之间的比例就是坐标的比例
                int endX = (int) ((list.get(0)[0] + 75) + x * bili);
                int endY = (int) ((list.get(0)[1] + 75) + y * bili);
    
                paint.setAntiAlias(true);
                paint.setStyle(Paint.Style.STROKE);
                paint.setStrokeWidth(10);
                paint.setColor(Color.GRAY);
                //设置虚线
                PathEffect pathEffect = new DashPathEffect(new float[]{5, 5, 5, 5}, 1);
                paint.setPathEffect(pathEffect);
                Path path = new Path();
                path.moveTo(list.get(0)[0] + 75, list.get(0)[1] + 75);
                path.lineTo(endX, endY);
                canvas.drawPath(path, paint);
    
    
                //canvas.drawLine(list.get(0)[0] + 75, list.get(0)[1] + 75, endX, endY, paint);
            }
    
        }
    
        /**
         * 计算各点和中间点最大的距离,最大距离作为圆的半径
         *
         * @param list
         * @return
         */
        private int calcCircleRadius(ArrayList<int[]> list) {
            int max = 0;
            delyList.clear();
    
            for (int i = 0; i < list.size(); i++) {
                int x = list.get(0)[0] + 75 - (list.get(i)[0] + 75);
                int y = list.get(0)[1] + 75 - (list.get(i)[1] + 75);
                double radus = Math.sqrt(x * x + y * y);
                delyList.add((int) radus);
                if (radus > max) {
                    max = (int) radus;
                }
            }
            return max;
    
    
        }
    
        private void drawLie(Canvas canvas, Paint paint, int[] arr) {
    
            canvas.drawLine(list.get(0)[0] + 75, list.get(0)[1] + 75, arr[0] + 75, arr[1] + 75, paint);
        }
    
        private void drawBitmap(Canvas canvas, int[] arr, Bitmap pic) {
            Rect src1 = new Rect(0, 0, pic.getWidth(), pic.getHeight());
            Rect dst1 = new Rect(arr[0], arr[1], arr[0] + 150, arr[1] + 150);
            canvas.drawBitmap(pic, src1, dst1, null);
        }
    
    
        float downX = 0;
        float downY = 0;
    
        //当前拖动的实那个按钮,没有选中状态为-1
        int current = -1;
    
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            super.onTouchEvent(event);
    
    
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    downX = event.getX();
                    downY = event.getY();
    
                    for (int i = 0; i < list.size(); i++) {
                        int[] arr = list.get(i);
                        if (downX > arr[0] && downX < arr[0] + 150 && downY > arr[1] && downY < arr[1] + 150) {
                            Log.e("MyView", "第" + i + "个 " + downX + " _ " + downY);
                            current = i;
                            break;
                        }
                    }
    
                    break;
                case MotionEvent.ACTION_MOVE:
    
    
                    if (current != -1) {
                        if (event.getX() < (getWidth() / 4 + 75)) {
                            list.get(current)[0] = getWidth() / 4;
                        } else if (event.getX() > (getWidth() * 3 / 4 - 75)) {
                            list.get(current)[0] = getWidth() * 3 / 4 - 150;
                        } else {
                            list.get(current)[0] = (int) event.getX() - 75;
                        }
    
                        if (event.getY() < (getHeight() / 4)) {
                            list.get(current)[1] = getHeight() / 4 - 75;
                        } else if (event.getY() > (getHeight() * 3 / 4)) {
                            list.get(current)[1] = getHeight() * 3 / 4 - 75;
                        } else {
                            list.get(current)[1] = (int) event.getY() - 75;
                        }
    
                        //list.get(current)[0] = (int) event.getX() - 75;
                        //list.get(current)[1] = (int) event.getY() - 75;
    
                        invalidate();
                    }
    
    
                    break;
                case MotionEvent.ACTION_UP:
                    current = -1;
    
                    break;
                case MotionEvent.ACTION_CANCEL:
    
                    break;
            }
            return true;
    
        }
    }
    

     

     

    展开全文
  • 希望用它画仿圆环,所有圆心都在另一圆周上,定圆和动圆的半径和稀密程序随机变化: import tkinter as tk import pyautogui as ag from random import * from time import sleep as Delay from m

    tkinter.Canvas.create_xxx()没有直接定义画圆的函数,可以用等轴的椭圆或360度的弧形代替。本例中用画椭圆函数创建一个以圆心坐标x,y和半径r为自变量的画圆函数 Circle(x,y,r,color) ;用它模仿画圆环,叠加很多圆,它们的圆心都在另一圆周上,定圆和动圆的半径以及动圆的稀密程序随机变化:

    import tkinter as tk
    import pyautogui as ag
    from random import *
    from time import sleep as Delay
    from math import sin
    from math import cos
    from math import pi
    from numpy import arange as np
    
    def Window_Open(W, H):
        X, Y = ag.size()
        winSize = str(W)+"x"+str(H)
        winPos = winSize + "+" + str((X - W) // 2)
        winPos += "+" + str((Y - H) // 2)
        win.geometry(winPos)
        win.resizable(False, False)
        title = u'桌面分辨率:' + str(X) + "x" + str(Y)
        title += ' ' * 5 + u'窗体大小:' + winSize
        win.title(title)
        win.update()
    
    def Circle(x,y,r,c='black'):
        coord=x-r,y-r,x+r,y+r
        tCanvas.create_oval(coord,outline=c)
    
    rand = lambda a,b:(random()*(a+1))+b
    
    if __name__ == '__main__':
        
        win = tk.Tk()
        Window_Open(480,480)
        tCanvas = tk.Canvas(win, width=win.winfo_width(), height=480, bg='white')
        tCanvas.pack(side="top")
        c_txt=tCanvas.create_text((225, 240),text='',anchor=tk.W, font=("宋体",20))
        Color = ['red','blue','green','magenta','navy','lawngreen','orange']
        I=20
        for i in range(1,I+1):
            R=rand(60,80)
            r=rand(30,50)
            step = rand(1,15)*pi/1080
            for t in np(-pi,pi,step):
                x = 240+R*cos(t)
                y = 220+R*sin(t)
                c = choice(Color)
                Circle(x,y,r,c)
            tCanvas.update()
            Delay(0.5)
            if i!=I:tCanvas.delete("all")
    
        tCanvas.create_text((225, 450),text='End!',anchor=tk.W, font=("宋体",20))
        win.mainloop()
    
    

    效果图: 

    展开全文
  • 点击蓝字关注我们新定义之圆(1) 圆的定义:到定点的距离等于定长的点轨迹是与定点为圆心,定长为半径的圆。 最常见的变化可以分为三大类:视角类、圆内外动点类、线段距离类。 视角类:(1)某线段所对角度为固定角度...

    点击蓝字关注我们

    新定义之圆(1)    

          圆的定义:到定点的距离等于定长的点轨迹是与定点为圆心,定长为半径的圆。

          最常见的变化可以分为三大类:视角类、圆内外动点类、线段距离类。

          视角类:(1)某线段所对角度为固定角度,角的顶点是在两段圆弧上运动;(2)某线段所对角度为一个范围角度,角的顶点是在两个月牙之间运动;(3)圆外一点到圆的两条切线成角度在一个范围内,点轨迹是圆环;

           圆内外动点类:(1)一个在圆上运动的动点与一个定点间线段上的中点或n等分点的轨迹是一个圆;(2)圆上一个定点、圆上一个动点、圆外一个动点之间形成两条线段成比例,圆外动点轨迹是月牙;(3)圆外点与圆心连线对应圆上点的对称点在圆内,圆外点轨迹是圆环;(4)圆外点与圆心连线的垂直平分线与圆有交点,圆外点的轨迹是圆饼;(5)圆外一点到圆的两条切线成固定角度时,点轨迹是圆;

    点击边框调出视频工具条 5d876b409565b2be17bc7c54d8595bc0.png

            线段距离类:(1)一个固定线段上任意点与线段外一点之间距离小于等于线段长,线段外点轨迹是个橄榄球;(2)一个固定线段上存在点与线段外一点之间距离小于等于线段长,线段外点轨迹是个操场;

          圆和直线相交只需要考虑相切;圆和线段相交考虑相切与过端点两种情况;圆与双曲线或抛物线相交,相切与相交两种可能。

    No.1

    K倍相关圆

    【例1】(2020初三上期末海淀28).    在平面直角坐标系xOy中,对于点P(a,b)和实数k(k>0),给出如下定义:当ka+b>0时,将以点P为圆心,ka+b为半径的圆,称为点P的k倍相关圆.

    例如,在如图1中,点P(1,1)的1倍相关圆为以点P为圆心,2为半径的圆.

    (1)在点P1(2,1),P2(1,-3)中,存在1倍相关圆的点是_____,该点的1倍相关圆半径为_______.

    (2)如图2,若M是x轴正半轴上的动点,点N在第一象限内,且满足∠MON=30°,判断直线ON与点M的1/2倍相关圆的位置关系,并证明.

    (3)如图3,已知点A的(0,3),B(1,m),反比例函数y=6/x的图象经过点B,直线l与直线AB关于y轴对称.

    ①若点C在直线l上,则点C的3倍相关圆的半径为       

    ②点D在直线AB上,点D的1/3倍相关圆的半径为R,若点D在运动过程中,以点D为圆心,hR为半径的圆与反比例函数y=6/x的图象最多有两个公共点,直接写出h的最大值. 

    158904bd6447048dbba0212c38fddae4.png

    【分析】

    (1)由题意知,k=1,针对于P1(2,1),a=2,b=1,ka+b=2+1=3>0,点P1(2,1)的1倍相关圆为以点P为圆心,3为半径的圆,即可求解;

    (2)设点M的坐标为(n,0),点M的1/2倍相关圆半径为1/2n.OM=n.因为MP⊥ON,∠OPM=90°,又∠MON=30°,则MP=1/2OM=1/2n,即可求解;

    (3)①求出F(1,0),则直线l的解析式为y=﹣3x+3,设C(c,﹣3c+3),由题意知,k=3,3c+(﹣3c+3)=3,即可求解;

    ②点D在直线AB上,设D(d,3d+3),由题意知,k=1/3即可求解.

    【解答】

    解:(1)由题意知,k=1,

    针对于P1(2,1),a=2,b=1,

    ∴ka+b=2+1=3>0,

    ∴点P1(2,1)的1倍相关圆为以点P为圆心,3为半径的圆,

    针对于P2(1,﹣3),a=1,b=﹣3,

    ∴ka+b=1﹣3=﹣2<0,

    ∴点P2(1,﹣3)不存在1倍相关圆

    故答案为:P1;3;

    (2)如图2中,结论:直线ON与点M的1/2倍相关圆的位置关系是相切.

    理由:设点M的坐标为(n,0),过M点作MP⊥ON于点P,

    45dcdee9f1e39de455e880f47171aa9f.png

    ∴点M的倍相关圆半径为1/2n.

    ∴OM=n.

    ∵MP⊥ON,∴∠OPM=90°,∵∠MON=30°,

    ∴MP=1/2OM=1/2n,

    ∴点M的倍相关圆的半径为MP,

    ∴直线ON与点M的倍相关圆相切;

    点击边框调出视频工具条 5d876b409565b2be17bc7c54d8595bc0.png

    (3)①如图3中,记直线AB与x轴的交点为E,直线l与x轴的交点为F,

    ∵B(1,m)在反比例函数y的图象上,

    ∴m=6,

    ∴B(1,6)

    ∵A(0,3),

    ∴直线AB的解析式为y=3x+3,令y=0,则3x+3=0,

    ∴x=﹣1,

    ∴E(﹣1,0),

    ∵直线l是直线AB关于y轴对称,

    ∴点F与点E关于y轴对称,

    ∴F(1,0),

    ∴直线l的解析式为y=﹣3x+3,

    ∵点C在直线l上,

    ∴设C(c,﹣3c+3),由题意知,k=3,

    ∴3c+(﹣3c+3)=3,

    ∴点C的3倍相关圆的半径是3,

    故答案为:3;

    ②∵点D在直线AB上,设D(n,3n+3),由题意知,k=1/3,

    ∴R=1/3n+(3n+3)=10/3n+3>0,∴n>-9/10.

    联立直线AB和反比例函数表达式并解得:x=1或﹣2,

    故点H(﹣2,﹣3)、B(1,6),

    圆与反比例函数y的图象最多有两个公共点,则圆和第三象限部分的图象没有交点,

    因为随着n 的增大与第一象限部分早晚有交点,

    fca1fa06ea66597cdf22b68311f58c17.png

    即hR<DH,

    c6b2997e71c7ce8e8178264e245a292b.png

    【点评】本题考查的是反比例函数综合运用,涉及到一次函数的性质、圆的基本知识、点的对称性等,曲线与圆位置关系转化为距离与半径之间的关系. 

    No.2

    切割线

    【例2】(2020初三上期末朝阳28).在平面直角坐标系xOy中,已知点A(0,2),点B在x轴上,以AB为直径作⊙C,点P在y轴上,且在点A上方,过点P作⊙C的切线PQ,Q为切点,如果点Q在第一象限,则称Q为点P的离点.例如,图1中的Q为点P的一个离点.

    c71dc8314bae497d3de57f899fe4715f.png

    (1)已知点P(0,3),Q为P的离点.

    ①如图2,若B(0,0),则圆心C的坐标为          ,线段PQ的长为 

    ②若B(2,0),求线段PQ的长;

    (2)已知1≤PA≤2, 直线l:y=kx+k+3(k≠0).

    ①当k=1时,若直线l上存在P的离点Q,则点Q纵坐标t的最大值为      

    ②记直线l:y=kx+k+3(k≠0)在-1≤x≤1的部分为图形G,如果图形G上存在P的离点,直接写出k的取值范围.

    【分析】

    (1)①如图可知:C(0,1),在Rt△PQC中,CQ=1,PC=2;

    ②如图,过C作CM⊥y轴于点M,连接CP,CQ,M(0,1).在Rt△ACM中,由勾股定理可得CA=√2,CQ=√2.在Rt△PCM中,由勾股定理可得PC=√5.

    在Rt△PCQ中,由勾股定理可得PQ.

    (2)①当k=1时,y=x+4,Q(t﹣4,t),P的纵坐标为4时,PQ与圆C相切,设B(m,0),则圆心为C(m/2,1),由CQ⊥PQ,可求CQ的解析式为y=﹣x+m/2+1,Q点横坐标为m/4-3/2=t﹣4,则C(2t﹣5,1),再由CQ=AC,得到t=6或t=2;

    ②y=kx+k+3经过定点(﹣1,3),PQ是圆的切线,AO是圆的弦,则有PQ2=PA•PO,当k<0时,Q点的在端点(﹣1,3)和(1,2k+3)之间运动,当P(0,4)时,PQ=2,以PQ为半径的圆与y轴交于点(0,4﹣2√2),此时k=1﹣2√2,当P(0,3)时,PQ,Q(1,2k+3),1+4k2=3,所以1﹣2√2

    【解答】

    解:(1)①如图可知:C(0,1),

    在Rt△PQC中,CQ=1,PC=2,

    ∴PQ=√3,

    故答案为(0,1);√3;

    ②如图,过C作CM⊥y轴于点M,连接CP,CQ.

    56dd21de5bd2ff4e8adf50c0087eea33.png

    ∵A(0,2),B(2,0),

    ∴C(1,1).

    ∴M(0,1).

    在Rt△ACM中,由勾股定理可得CA=√2.

    ∴CQ=√2.

    ∵P(0,3),M(0,1),

    ∴PM=2.

    在Rt△PCM中,由勾股定理可得PC=√5.

    在Rt△PCQ中,由勾股定理可得PQ=√3.

    点击边框调出视频工具条 5d876b409565b2be17bc7c54d8595bc0.png

    (2)①如图1:当k=1时,y=x+4,

    ∴Q(t﹣4,t),

    ∵1≤PA≤2,

    ∴P的纵坐标为4时,PQ与圆C相切,

    设B(m,0),

    ∴C(,1),

    ∵CQ⊥PQ,

    ∴CQ的解析式为y=﹣x+m/2+1,

    ∴Q点横坐标为m/4-3/2,

    ∴m/4-3/2=t﹣4,

    ∴m=4t﹣10,

    ∴C(2t﹣5,1),

    ∵CQ=AC,

    797a57dd6c2f511c916a0d77e863f132.png

    ∴t=6或t=2,

    ∴t的最大值为6;

    故答案为6.

    ②∵﹣1≤x≤1,

    ∵y=kx+k+3经过定点(﹣1,3),

    ∵PQ是圆的切线,AO是圆的弦,

    ∴PQ2=PA•PO,

    a9d98eb0b9405d31bbcbc3d1e38f2107.png

    当k<0时,

    Q点的在端点(﹣1,3)和(1,2k+3)之间运动,

    当P(0,4)时,PQ=2√2,

    以PQ为半径径的圆与y轴交于点(0,4﹣2√2),

    当圆的半径无穷大时,Q点与点(0,4﹣2√2)无限接近重合

    此时k+3=4﹣2√2,即k=1-2√2

    当P(0,3)时,PQ=√3,

    Q(1,2k+3),

    53139626a3a1d5859a36bcfd0e3fc06e.png

    ∴k=±√2/2,

    ∴k=-√2/2,

    ∴1﹣2√2

    当k>0时,

    当P(0,4)时,PQ=2√2,

    以PQ为半径的圆与y轴交于点(0,4+2√2),

    当圆的半径无穷大时,Q点gn 点(0,4+2)无限接近重合

    此时k+3=4+2√2,即k=1+2√2

    当P(0,3)时,PQ=√3,

    Q(1,2k+3),

    53139626a3a1d5859a36bcfd0e3fc06e.png

    ∴k=±√2/2,

    ∴k=√2/2,

    ∴√2/2≤k<1+2±√2/2.

    综上:1﹣2√2

    或√2/2≤k<1+2±√2/2

    【点评】本题考查圆的综合;熟练掌握圆的切线的性质,通过相似找到过定点线段与切线长之间的数量关系.

    展开全文
  • 【第一幅码绘】p5实现有趣的动态图形艺术(利用正弦函数) 实现图形运用的数学知识 正弦函数想必大家都十分熟悉,但是我们对它的...图形的素材来源于老师所给资料,从图形素材中可观察到,各圆弧对应圆的半径不...

    【第一幅码绘】p5实现有趣的动态图形艺术(利用正弦函数)

    实现图形运用的数学知识

    正弦函数想必大家都十分熟悉,但是我们对它的印象可能停留在那波浪形的函数曲线上,实际上我们还可以利用正弦函数去实现更有趣的图形。正弦函数相位的变化会引起图形的变化,本文就利用了相位的变化去绘制出不同状态的圆弧,从而用这些圆弧构成一幅有趣的图形。
    动态图形截图
    图形的素材来源于老师所给资料,从图形素材中可观察到,各圆弧对应圆的半径不同,且相邻圆弧半径差相同,每个圆弧都在重复着增长为半圆,然后再缩短为一段很小的圆弧的行为,每段圆弧增长时的速度规律为先加快后减慢。且相邻圆弧开始增长的时间有相同的时间差,这就让我想到了正弦函数,以及正弦函数的相位差问题。

    具体实现

    正弦函数公式:y=Asin(ωx+φ),通过改变φ的值改变函数的相位,可观察到各圆弧的周期相同,振幅也相同,所以只需要改变函数的φ值即可使各圆弧在不同的时间开始增长。
    例如:arc(400,400,300,300,PI,PI+PI*(39/80sin(wt)+41/80));
    arc(400,400,280,280,PI,PI+PI*(39/80sin(wt+3/7)+41/80));所绘制的两个圆弧即可随着时间的变化呈现出不同的角度的圆弧。以此类推,即可制作出与原图一样的动图。

    利用原图进行扩展

    原图中,圆弧只可向一个方向进行增长,所以我对其进行扩展,使其向两个方向皆可增长。且原图中圆弧运动对应正弦函数中的t是始终按照固定的值进行增长的,所以在我的扩展中,改变t的增长值,从视觉上看,会有圆弧增长时快时慢的效果,同时,我改变了圆弧的颜色,使圆弧呈现出颜色的变化,看起来更加美观。
    扩展图

    示例代码

    function setup() {
    createCanvas(800,600); 
    }
    var w;//=PI;
    var t=0.0;
    function draw() {
    // 调用函数second(),获得程序运行经过的秒数
      //var t = second()%2;
      background(0);
      noFill();
      strokeWeight(4);
      stroke(255,255,255);
      w=PI;
      arc(400,400,300,300,HALF_PI*(39/80*sin(w*t)+41/80),HALF_PI+3/2*PI*(39/80*sin(w*t)+41/80)); 
      stroke(255,255,200);
      arc(400,400,280,280,HALF_PI*(39/80*sin(w*t+3/7)+41/80),HALF_PI+3/2*PI*(39/80*sin(w*t+3/7)+41/80)); 
      stroke(255,255,180);
      arc(400,400,260,260,HALF_PI*(39/80*sin(w*t+6/7)+41/80),HALF_PI+3/2*PI*(39/80*sin(w*t+6/7)+41/80));
      stroke(255,255,150); 
      arc(400,400,240,240,HALF_PI*(39/80*sin(w*t+9/7)+41/80),HALF_PI+3/2*PI*(39/80*sin(w*t+9/7)+41/80)); 
      stroke(255,255,120);
      arc(400,400,220,220,HALF_PI*(39/80*sin(w*t+12/7)+41/80),HALF_PI+3/2*PI*(39/80*sin(w*t+12/7)+41/80));
      stroke(255,255,100);
      arc(400,400,200,200,HALF_PI*(39/80*sin(w*t+15/7)+41/80),HALF_PI+3/2*PI*(39/80*sin(w*t+15/7)+41/80));
      stroke(255,255,80); 
      arc(400,400,180,180,HALF_PI*(39/80*sin(w*t+18/7)+41/80),HALF_PI+3/2*PI*(39/80*sin(w*t+18/7)+41/80));
      stroke(255,255,60); 
      arc(400,400,160,160,HALF_PI*(39/80*sin(w*t+21/7)+41/80),HALF_PI+3/2*PI*(39/80*sin(w*t+21/7)+41/80)); 
       stroke(255,230,60); 
      arc(400,400,140,140,HALF_PI*(39/80*sin(w*t+24/7)+41/80),HALF_PI+3/2*PI*(39/80*sin(w*t+24/7)+41/80)); 
      stroke(255,210,60); 
      arc(400,400,120,120,HALF_PI*(39/80*sin(w*t+27/7)+41/80),HALF_PI+3/2*PI*(39/80*sin(w*t+27/7)+41/80));
      stroke(255,190,60);  
      arc(400,400,100,100,HALF_PI*(39/80*sin(w*t+30/7)+41/80),HALF_PI+3/2*PI*(39/80*sin(w*t+30/7)+41/80)); 
      stroke(255,170,60); 
      arc(400,400,80,80,HALF_PI*(39/80*sin(w*t+33/7)+41/80),HALF_PI+3/2*PI*(39/80*sin(w*t+33/7)+41/80)); 
      stroke(255,150,60); 
      arc(400,400,60,60,HALF_PI*(39/80*sin(w*t+36/7)+41/80),HALF_PI+3/2*PI*(39/80*sin(w*t+36/7)+41/80)); 
      stroke(255,130,60); 
      arc(400,400,40,40,HALF_PI*(39/80*sin(w*t+39/7)+41/80),HALF_PI+3/2*PI*(39/80*sin(w*t+39/7)+41/80));
      stroke(255,110,60);  
      arc(400,400,20,20,HALF_PI*(39/80*sin(w*t+42/7)+41/80),HALF_PI+3/2*PI*(39/80*sin(w*t+42/7)+41/80)); 
    
      stroke(255,90,60); 
      point(400,400);
      if(t<1)
     {
       t=t+2/60;
     }
      else
      {
        t=t+4/60;
      }
     if(t>2)
     {
        t=0;
     }
     
    }
    
    展开全文
  • ios动画指南

    2018-12-17 16:02:00
    CoreAnimation框架是基于OpenGL与...在CoreAnimation中,大多数动画效果是添加在图层属性的变化上,例如,改变图层位置,大小,颜色,圆角半径等。Layer层并不决定视图展现,它只是存储了视图几何属性状态。
  • p5.js动态自画像

    千次阅读 2019-10-23 16:06:19
    可以看到眼睛是由好几个不同颜色的同心半圆构成的,当鼠标移动时,同心半圆的半径由小变大,直到当前圆的半径等于外圈圆最开始的半径,而颜色此时也是相应在变化的,代码如下。 fill(150+eyesColor/2,50+...
  • iOS 核心动画

    2018-12-17 15:59:13
    在CoreAnimation中,大多数动画效果是添加在图层属性的变化上,例如,改变图层位置,大小,颜色,圆角半径等。Layer层并不决定视图展现,它只是存储了视图几何属性状态。简书著作权归作者所有,任何形式...
  • QQ聊天界面好友来信息会有一个气泡显示多少条信息,如不看也可以拖拽让其消失。 效果如下: 分析: 动画组成部分如下图 ⚠️重点 ...四、不动圆的半径随着 可动圆 与 不动圆 距离变化变化(...
  • 可以通过本篇学习来巩固提升如果只有第1个问题是肯定,那么还是再重新学习消化上篇内容开始前再强调下,脑海里一定要对“单位半径转圈”这个动态图像有全面认识,对转圈过程中cos和sin的变化有直观印象...
  • GSP5.exe

    2020-04-01 09:16:40
    2. 度量两圆的半径,并计算它们的差 3. 以AB为直径画圆 4. 画圆(A,(半径⊙AD)-(半径⊙BC=0.94厘米)),与以AB为直径画的圆交于E(其中一个交点)。 5. 作直线BE;作直线(A,E)交圆(A,D)于F 6. 作...
  • d3.js data-join(03)

    2021-01-25 20:50:32
    疫情感染的人数比例绑定到圆的半径 为什么要使用data-join? 使用data-join可以省去大量根据数据设置图元属性的代码量 对于动态变化的数据提供统一的接口 以数据为中心的可视化操作 根据数据的每个属性自动调整...
  • 首先点集合的生成是由r和t来控制的,X的生成是控制三角函数的位置,如果r调整合适的话,其实X是可以成为一个很规矩的圆的。r则是半径。对于最后的结果由集中不同的调整方式,后面的softmax的bp过程自己推一下差不多...
  • 思路及实现  第一次看到这个效果就知道可以通过自定义控件实现:点通过画圆填充方式实现,点大小的变化通过属性动画不断地修改圆半径实现,透明度通过属性动画不断地给画笔设置新alpha值实现。总共需要画3
  • 波纹扩散效果,是通过定时改变波纹半径来实现,此波纹是由先后两个空心组成,在实现过程中要注意时间和各自尺寸变化。圆球效果同样也是定时绘制结果,平滑运动只是错觉。在这里是每隔200ms(波纹定时值)...
  • 后,只要 L2 生命期没有终结,它以后的变化就可能会影响到 L1 数值。因 此在赋值后应该及时销毁或者初始化 L2,以免发生不可预见错误。 比较 使用 Contains 方法。 ArrayList Array1=new ArrayList(); Array1...
  • 《新编Pro/ENGINEER野火版3.0入门与提高》既适合Pro/ENGINEER初、中级读者阅读,又可以作为大专院校相关专业或者企业培训教材,同时对Pro/ENGINEER高级用户也有一定参考价值。 目录: 第1章 Pro/...
  • 重磅推出SuperTextView2.x版本,属性参数相比1.x有些变化,1.x用户升级2.x时候请注意 1、功能描述 SuperTextView是一个功能强大View,可以满足日常大部分布局样式,开发者可已自行组合属性配置出属于自己...
  • 我们就想到可不可以做一款可以很方便生成图片,并且还能屏蔽掉直接使用 Canvas 一些坑库呢?对此我们发起了 “画家计划— 通过 json 数据形式,来进行动态渲染并绘制出图片”。 Painter 库整体架构如下: ...
  • 4. 制动器要安装在靠近电动机,使浮动轴可以在运行机构制动时发挥吸收冲击动能作用。 2.2 大车运行机构计算 已知数据: 起重机起重量Q=100KN,桥架跨度L=16.5m,大车运行速度Vdc=90m/min,工作类型为中级,...
  • 该工作机有轻微振动,由于V带有缓冲吸振能力,采用V带传动能减小振动带来影响,并且该工作机属于小功率、载荷变化不大,可以采用V带这种简单结构,并且价格便宜,标准化程度高,大幅降低了成本。减速器部分两级...
  • 应用案例 - 华氏温度转换成摄氏温度 / 输入圆的半径计算周长和面积 / 输入年份判断是否是闰年 Day03 - 分支结构 分支结构的应用场景 - 条件 / 缩进 / 代码块 / 流程图 if语句 - 简单的if / if-else结构 / if-...
  • 从一般意义上讲,对象是现实世界中一个实际存在事物,它可以是有形,也可以是无形。对象是构成世界一个独立单位,它具有自己静态特征和动态特征。面向对象方法中对象,是系统中用来描述客观事物一个...
  • 也就是说,当TripsLayer轨迹移动时,ScatterplotLayer的圆半径也会随之变化。之前也在ScatterplotLayer里面添加了animate,但是没有动画效果,可能是Setstate没有设置正确。非常感谢帮助~~ 代码和现在实现效果...

空空如也

空空如也

1 2
收藏数 33
精华内容 13
关键字:

动圆的半径可以变化