AMcoder - javascript, python, java, html, php, sql

Ինչպես սահմանափակել, թե որտեղ եք գծում գծերը

Ես փորձում եմ սահմանափակել, թե որտեղ եմ գծեր գծում եռանկյունու ներսում, որպեսզի գծերը չհորդանան և չխանգարեն կտավի այլ տարրերին, ահա իմ մինչ այժմ ծածկագիրը.

var points = [];
var r = 500;
var lines = 30;

function setup() {
  createCanvas(1000, 1000);
  angleMode(DEGREES);
  var angle = 60;
  for (var i = 1; i < 7; i++) {
    var tempX = r * sin((angle * i + 30) % 360) + width / 2;
    var tempY = r * cos((angle * i + 30) % 360) + height / 2;
    points.push([tempX, tempY]);
  }
  noSmooth();
  noLoop();
}

function draw() {
  for (var i = 0; i < points.length; i++) {
    line(points[i][0], points[i][1], points[(i + 1) % 6][0], points[(i + 1) % 6][1]);
    var tempAngle = 240 + i * 60;
    var tempX = r * 1.1545 * sin(tempAngle) + points[i][0];
    var tempY = r * 1.1545 * cos(tempAngle) + points[i][1];
    fill(255);
    triangle(points[i][0], points[i][1], tempX, tempY, points[(i + 1) % 6][0], points[(i + 1) % 6][1]);
    stroke(0);
    for (var j = 0; j < lines + 1; j++) {
      var distance = r + (dist(points[i][0], points[i][1], tempX, tempY) - r) / lines * j;
      var tempAngle2 = tempAngle = (30 / lines * j) + 210 + i * 60;
      var tempX2 = distance * sin(tempAngle2) + points[i][0];
      var tempY2 = distance * cos(tempAngle2) + points[i][1];;
      line(points[i][0], points[i][1], tempX2, tempY2);
    }
  }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.6.1/p5.js"></script>


  • Ի՞նչն է սխալ ձեր հարցի լուծման մեջ: Կարո՞ղ եք կոնկրետ նշել, թե ինչ խնդիր(ներ) է/դեռևս առկա չէ: 27.11.2018
  • @WillCain վերջին եռանկյունը դեռ հոսում է, և ես չեմ կարող դա շտկել, քանի որ միշտ կլինի մեկը, որը լցված է իմ կոդով 27.11.2018

Պատասխանները:


1

Դուք կարող եք օգտվել այն փաստից, որ ընթացիկ տարրի և հաջորդ տարրի միջև անկյունը միշտ 90 ° է: Սա հանգեցնում է նրան, որ եռանկյունների երկայնքով գծերի երկարությունը մեծանում է անկյունների փոխադարձ կոսինուսով.

Նկատի ունեցեք, որ աստիճաններով անկյունը կարող է փոխարկվել ռադիաններով անկյան angle_red = Math.PI * angle_degree/180.0-ով.

var angle_degree = 30.0;
var dist_pt = r / Math.cos(Math.PI * angle_degree/180.0);

Տես օրինակը, որտեղ ես կիրառել եմ տողերի երկարության բանաձևը ձեր սկզբնական կոդի վրա.

var points = [];
var r = 250;
var lines = 30;

function setup() {
    createCanvas(500, 500);
    angleMode(DEGREES);
    var angle = 60;
    for (var i = 1; i < 7; i++) {
        var tempX = r * sin((angle * i + 30) % 360) + width / 2;
        var tempY = r * cos((angle * i + 30) % 360) + height / 2;
        points.push([tempX, tempY]);
    }
    noSmooth();
    noLoop();
}

function draw() {
    for (var i = 0; i < points.length; i++) {
        line(points[i][0], points[i][1], points[(i + 1) % 6][0], points[(i + 1) % 6][1]);
        var tempAngle = 240 + i * 60;
        var angle_degree = 30.0;
        var dist_pt = r / Math.cos(Math.PI * angle_degree/180.0);
        var tempX = dist_pt * sin(tempAngle) + points[i][0];
        var tempY = dist_pt * cos(tempAngle) + points[i][1];
        fill(255, 128+i*20, 128);
        triangle(points[i][0], points[i][1], tempX, tempY, points[(i + 1) % 6][0], points[(i + 1) % 6][1]);
        stroke(0);
       
        for (var j = 0; j < lines + 1; j++) {
            var cur_angle = 30 / lines * j;
            var distance = r / Math.cos(Math.PI * cur_angle/180.0);
            var tempAngle2 = tempAngle = (30 / lines * j) + 210 + i * 60;
            var tempX2 = distance * sin(tempAngle2) + points[i][0];
            var tempY2 = distance * cos(tempAngle2) + points[i][1];;
            line(points[i][0], points[i][1], tempX2, tempY2);
        }
    }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.6.1/p5.js"></script>

27.11.2018
  • Շնորհակալություն մանրամասն պատասխանի համար։ 29.11.2018
  • Նոր նյութեր

    Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
    JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

    Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
    Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

    Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
    Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

    Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
    Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

    C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
    C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

    Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
    Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..