Shape - "Alignment"

 


 


  




#include "ofxSVG.h"

ofxSVG* currentShape;
vector<ofxSVG> shapes;

int     tileCount = 5;
float   tileWidth, tileHeight;

float   shapeSize = 50;
float   newShapeSize = shapeSize;
float   shapeAngle = 0;
ofColor shapeColor(0, 130, 164);

float   maxDist;

int fillMode = 0;
int sizeMode = 0;


//--------------------------------------------------------------
void testApp::setup(){
    
    ofBackground(255);
    ofEnableSmoothing();
    
    tileWidth   = ofGetWidth()/(float)tileCount;
    tileHeight  = ofGetHeight()/(float)tileCount;
    maxDist     = sqrt((float)ofGetWidth()*ofGetWidth()+ofGetHeight()*ofGetHeight());
    
    // load shapes
    ofDirectory dir;
    int n = dir.listDir("shapes");
    for (int i = 0; i < n; i++ ) {
        shapes.push_back(ofxSVG());
        shapes.back().load(dir.getPath(i));
        
        for (int i = 0; i < shapes.back().getNumPath(); i++ ) {
            shapes.back().getPathAt(i).setUseShapeColor(false);
        }
    }
    currentShape = &shapes[0];
}

//--------------------------------------------------------------
void testApp::update(){

}

//--------------------------------------------------------------
void testApp::draw(){
    
    ofEnableAlphaBlending();
    
    for (int gridY = 0; gridY < tileCount; gridY++ ) {
        for (int gridX = 0; gridX < tileCount; gridX++ ) {
            
            // calculate grid position
            float posX = tileWidth * gridX + tileWidth*0.5;
            float posY = tileHeight * gridY + tileHeight*0.5;
            
            float dist = ofDist(mouseX, mouseY, posX, posY);
            
            // calculate angle between mouse position and actual position of the shape
            float angle = atan2(mouseY-posY, mouseX-posX) + ofDegToRad(shapeAngle);
            
            // size mode
            if ( sizeMode == 0 ) newShapeSize = shapeSize;
            if ( sizeMode == 1 ) newShapeSize = shapeSize*1.5 - ofMap(dist, 0, 500/*Radius*/, 5, shapeSize);
            if ( sizeMode == 2 ) newShapeSize = ofMap(dist, 0, 500/*Radius*/, 5, shapeSize);
            
            // fill mode ( always use SVG style, seems SVGtiny don't have func to disable )
            if ( fillMode == 0 ) ofSetColor(0);
            if ( fillMode == 1 ) ofSetColor( shapeColor );
            if ( fillMode == 2 ) ofSetColor( shapeColor, ofMap(dist, 0, maxDist, 255, 0));
            if ( fillMode == 3 ) ofSetColor( shapeColor, ofMap(dist, 0, maxDist, 0, 255));
            
            // draw shape
            ofPushMatrix();
            ofTranslate(posX, posY);
            ofRotate(ofRadToDeg(angle));
            
            // there is no CENTER MODE and size setting in SVGtiny, so use scale
            ofScale(newShapeSize/shapeSize, newShapeSize/shapeSize);
            
            currentShape->draw();
            ofPopMatrix();
            
            
        }
    }
    
}

//--------------------------------------------------------------
void testApp::keyPressed(int key){
    if ( key == 'c' ) fillMode = (fillMode+1)%4;
    if ( key == 'd' ) sizeMode = (sizeMode+1)%3;
    
    if ( key == 'g' ) {
        tileCount = tileCount+5;
        if ( tileCount > 20 ) tileCount = 10;
        tileWidth   = ofGetWidth()/(float)tileCount;
        tileHeight  = ofGetHeight()/(float)tileCount;
    }
    
    if (key == '1') currentShape = &shapes[0];
    if (key == '2') currentShape = &shapes[1];
    if (key == '3') currentShape = &shapes[2];
    if (key == '4') currentShape = &shapes[3];
    if (key == '5') currentShape = &shapes[4];
    if (key == '6') currentShape = &shapes[5];
    if (key == '7') currentShape = &shapes[6];

    if (key == OF_KEY_UP    ) shapeSize +=5;
    if (key == OF_KEY_DOWN  ) shapeSize = max(shapeSize-5, 5);
    if (key == OF_KEY_LEFT  ) shapeAngle -=5;
    if (key == OF_KEY_RIGHT ) shapeAngle +=5;

	if ( key == ' ' )
	{
		shapeColor.r = ofRandom(0, 255);
		shapeColor.g = ofRandom(0, 255);
		shapeColor.b = ofRandom(0, 255);
	}

}

-GENERATIVE DESIGN-

考虑可再生能源出力不确定性的商业园区用户需求响应策略(Matlab代码实现)内容概要:本文围绕“考虑可再生能源出力不确定性的商业园区用户需求响应策略”展开,结合Matlab代码实现,研究在可再生能源(如风电、光伏)出力具有不确定性的背景下,商业园区如何制定有效的需求响应策略以优化能源调度和提升系统经济性。文中可能涉及不确定性建模(如场景生成与缩减)、优化模型构建(如随机规划、鲁棒优化)以及需求响应机制设计(如价格型、激励型),并通过Matlab仿真验证所提策略的有效性。此外,文档还列举了大量相关的电力系统、综合能源系统优化调度案例与代码资源,涵盖微电网调度、储能配置、负荷预测等多个方向,形成一个完整的科研支持体系。; 适合人群:具备一定电力系统、优化理论和Matlab编程基础的研究生、科研人员及从事能源系统规划与运行的工程技术人员。; 使用场景及目标:①学习如何建模可再生能源的不确定性并应用于需求响应优化;②掌握使用Matlab进行商业园区能源系统仿真与优化调度的方法;③复现论文结果或开展相关课题研究,提升科研效率与创新能力。; 阅读建议:建议结合文中提供的Matlab代码实例,逐步理解模型构建与求解过程,重点关注不确定性处理方法与需求响应机制的设计逻辑,同时可参考文档中列出的其他资源进行扩展学习与交叉验证。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值