月度存档: 8 月 2019

把圆形切成等分的算法

比如我要把圆形切成30等分,代码如下:

import flash.display.Shape;
var k:int =30;//切成30等分

var cx:Number = 375/2;
var cy:Number = 667/2;
var cr:Number =cx-10;
var line:Shape = new Shape();
line.graphics.lineStyle(1,RandRGB());
function draw1(x1:Number,y1:Number):void{
line.graphics.moveTo(cx,cy);

line.graphics.lineTo(x1,y1);
}


var okx:Number;
var oky:Number;
var d:Number;
for(var i:int=0;i<k;i++){
    var dd:int = 360/k;
    var d2:Number = i*dd;

        if(d2==0){
            okx = cx;
            oky = cy-cr;
        }else if(d2==180){
            okx = cx;
            oky = cy+cr;
        }else if(d2==270){
            okx = cx-cr;
            oky = cy;
        }else if(d2==90){
            okx = cx+cr;
            oky = cy;
        }else{

            if(d2<90){
                d = d2*Math.PI/180;
                okx = cx+cr*Math.sin(d);
                oky = cy-cr*Math.cos(d);
            }
            else if(d2>90&&d2<180)
            {
                d= (d2-90)*Math.PI/180;
                okx = cx+cr*Math.cos(d);
                oky = cy+cr*Math.sin(d);
            }else if(d2>180&&d2<270)
            {
                d = (360-90-d2)*Math.PI/180;
                okx = cx-cr*Math.cos(d);
                oky = cy+cr*Math.sin(d);        
            }else if(d2>270){
                d = (360-d2)*Math.PI/180;
                okx = cx-cr*Math.sin(d);
                oky = cy-cr*Math.cos(d);
            }

        }

        draw1(okx,oky);
        //trace(cx,cy,cr,okx,oky,d2,d);
}

var c:Shape = new Shape(); 

c.graphics.lineStyle(2,0);
c.graphics.drawCircle(cx,cy,cr);

c.graphics.drawCircle(cx,cy,cr*0.8);
c.graphics.drawCircle(cx,cy,cr*0.64);

addChild(line);
addChild(c);

function RandRGB():uint {
  return (Math.random() * 0xffffff + 0x000000);
}

yii2 关联查询

先说一个讨巧的办法

用sql关联两张表查询,生成视图,然后对视图进行gii,注意因为视图没有主键,需要在先生成的model表里加上代码手动设置虚拟主键,然后再生成crud代码

namespace app\models;

use yii\db\ActiveRecord;

class YourModel extends ActiveRecord
{
    /**
     * @return string[] the primary key name(s) for this AR class.
     */
    public static function primaryKey()
    {
        return ['id']; // Change to your column name
    }
}

在这个示例中,primaryKey() 方法返回一个包含主键列名的数组。在这个例子中,主键被设置为 id。你可以将 id 更改为你的实际主键列名。

请注意,如果你的主键是一个复合主键(由多个列组成),你可以在数组中包含所有的列名。例如,如果你的主键由 id 和 type 两个列组成,你可以这样写:

public static function primaryKey()
{
    return ['id', 'type'];
}

以下是比较正经的方法

假设有两张表通过id关联,现在想在查询结果里面展示两张表的对应字段,并支持搜索排序功能

前置条件:

gii自动生成的两表的model中有关联关系函数,类似:

 /**
     * @return \yii\db\ActiveQuery
     */
    public function getTest()
    {
        return $this->hasMany(Test::className(), ['DP_ID' => 'dpId']);
    }

第一步,在model和searchmodel里面添加对应的字段名

public $name
并且在rules里面也加上对应规则

第二步,修改searchmodel里面的search($params)函数

添加如下代码

$query->joinWith(['test']);
        $query->select("test_detail.*, test.NAME");
        $query->andFilterWhere(['test.DP_ID' => $this->dpId]);


        $query->andFilterWhere([
            // other params
            'NAME' => $this->NAME,
        ]);

第三步 排序处理

在searchmodel里面的search($params)函数里添加如下代码:

$dataProvider->setSort([
        'attributes' => [
            /* 其它字段不要动 */    
            /*  下面这段是加入的 */
            /*=============*/
            'NAME' => [
                'asc' => ['test.NAME' => SORT_ASC],
                'desc' => ['test.NAME' => SORT_DESC],
                'label' => 'NAME'
            ],
            /*=============*/
        ]
    ]); 

第四步,修改index视图

 <?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],
            'dpId',
            ['label'=>'名称',  'attribute' => 'NAME',  'value' => 'NAME' ],//<=====加入这

yii2使用gii

1、设置web/index.php文件

defined('YII_ENV_DEV') or define('YII_ENV_DEV', true);

才能访问gii

2、advanced版本修改config/main.php,basic版本是web.php

'modules' => [
        'gii' => [
            'class'      => 'yii\gii\Module',
            'allowedIPs' => ['*', '127.0.0.1', '::1', '192.168.0.*', '192.168.178.20']
        ]
    ],

3、访问yousite/index.php?r=gii

get the number of files in one file folder

find ./company -type f | wc -l