Dej tam 2pi a nech tam atanxy (nebo prohoď parametry atan2) a máš to hotové.
Příspěvky odeslané z IP adresy 213.211.51.–
To je převod na radiány. 360 * deg je 2 * PI
No o tom "eliptickém zkreslení" jsem uvažoval hned na začátku, že by to mohlo jít spočítat, ale to nedám (jestli to vůbec jde).
I s tímhle přístupem nemusíš počítat přesně. Co dostaneš navíc jedním krokem, tak můžeš zase ubrat na dalším kroku a nikde to neujede víc než 1px. Průsečík je to nejmenší :-)
Já jsem to půlení intervalu taky zkoušel, ale tady nejde jednoznačně říct, jestli je potřeba prodloužit nebo zkrátit, tak to nemůže fungovat (obecně).
Triviální a zároveň rychlé řešení mě nenapadá.
Já si naopak myslím, že tohle řešení je vpoho, protože něco "chytrého" by byly rovnice jako kráva.
Možná by šlo spočítat délku té strany a pak ty body najít jako průsečíky s kružnicí, ale z toho se mi vaří hlava. A možná jen uvažuju špatným směrem.
Jestli nepotřebuješ perfektní matematické řešení, tak bych to prostě vybrutil. Vezmu minimum a maximum z vepsané a opsané kružnice a pak půlením intervalu najdu hodnotu, se kterou to vyjde na elipse. Asi by při tom mělo i jít testovat úhel "zalomení" a rychle poznat slepou uličku, tak by to nemuselo být pomalé.
No já jsem se trochu unáhlil. Nevím, co má pak dál. Teoreticky to může pokračovat ke zdárnému konci, ale známe fixe... :-)
Prosím tě, podívej se k čemu ty zmíněné funkce jsou a pak ti snad dojde, že tohle vůbec nic neřeší.
Objekty jsou v JavaScriptu (resp. ECMAScriptu) od začátku. Ale ano, technicky je to asociativní pole.
Mně šlo jen o upřesnění, že `{}` se říká objekt, aby nenarazil na nepochopení s pojmem `arraylist`, což je něco jiného a v JS takový pojem neexistuje.
V JS arraylist neexistuje a {} je objekt.
V CellFormatting můžeš měnit formát podle hodnoty. V příkladu v dokumentaci je zrovna změna barvy.
Entity budou ukončené středníkem. Pokud tam ten středník chybí, tak je to oříznutá entita na konci stringu. Nic jiného se nesmaže.
HTML můžeš převést na prostý text pomocí strip_tags a htmlspecialchars_decode (apod.). (A spousty inteligentnějších knihoven).
Pak pokud je v tom XML nějaký limit na délku hodnoty, tak to pravděpodobně bude dekódovaná délka. Takže ten text budeš ořezávat před enkódováním a nedostaneš rozbité entity. Pokud to opravu potřebuješ ořezávat až po enkódování, tak prostě tu případnou rozbitou entitu odmázni [třeba preg_replace('/&[^;]*$/', '', $s)].
Na začátku teda dekóduješ z HTML a pak enkóduješ do XML, tak v těch funkcích použij odpovídající flagy.
Věděl bych, že lokální proměnné funkce nejsou vidět mimo tu funkci, Že ve standardní knihovně není objekt `google`. Že moje volná funkce se magicky nestane jeho metodou. Že v konzoli uvidím běhové chyby... prostě takové ty tiviality, co se člověk naučí do týdne.
Taky bych z několikařádkového ukázkového kódu poznal, kde tam je přidávání položky do pole a převod celého pole do HTML, takže přesně to bych pak v tom svém přidaném formuláři použil.
Tak tady to máš, jen tak zhruba. Nejsem webař a neříkám, že to má být zrovna takhle. Třeba CSS jsem částečně prasil vědomě a částečně protože to prostě lépe neumím, ale máš tam dost věcí, abys měl na pár dní co Googlit, pokud něčemu nerozumíš.
<html>
<head>
<style type="text/css">
.page {
padding: 0px 30px;
}
.page.active {
display: block;
}
.page.hidden {
display: none;
}
ul {
list-style-type: none;
margin: 0;
padding: 0;
overflow: hidden;
background-color: #333;
}
li {
float: left;
}
li a {
display: block;
color: white;
text-align: center;
padding: 20px 20px;
text-decoration: none;
}
li a:hover {
background-color: black;
}
table,
th,
td {
padding: 10px;
border-collapse: collapse;
}
#userList table {
width: 100%;
}
#userList table,
#userList th,
#userList td {
border: 1px solid black;
text-align: left;
}
#userForm table {
margin-left: auto;
margin-right: auto;
}
input[type="button"] {
display: block;
margin: auto;
padding: 10px 30px;
}
</style>
<script type="text/javascript">
class Pojistenec {
constructor(jmeno, prijmeni, vek, tel) {
this.jmeno = jmeno;
this.prijmeni = prijmeni;
this.vek = vek;
this.tel = tel;
}
}
let databaze = [
new Pojistenec("Jana", "Svobodová", 24, "+420123456789"),
new Pojistenec("Jiří", "Novák", 25, "+420123456790"),
new Pojistenec("Jan", "Novotný", 26, "+420123456791"),
];
function addUser(form) {
databaze.push(
new Pojistenec(
form.jmeno.value,
form.prijmeni.value,
+form.vek.value,
form.tel.value
)
);
renderUserList();
}
function renderUserList() {
const tbody = document.querySelector("#userList tbody");
tbody.innerHTML = "";
for (const user of databaze) {
const row = document.createElement("tr");
[user.jmeno + " " + user.prijmeni, user.tel, user.vek].forEach(
(text) => {
const td = document.createElement("td");
td.innerText = text;
row.appendChild(td);
}
);
tbody.appendChild(row);
}
}
function showPage(pageId) {
for (const page of document.querySelectorAll(".page")) {
if (page.id == pageId) {
page.classList.remove("hidden");
page.classList.add("active");
} else {
page.classList.remove("active");
page.classList.add("hidden");
}
}
}
</script>
</head>
<body onload="renderUserList()">
<ul>
<li>
<a href="#" onclick="showPage('pageUsers'); return false;">Pojištěnci</a>
</li>
<li>
<a href="#" onclick="showPage('pageAbout'); return false;">O aplikaci</a>
</li>
</ul>
<div id="pageUsers" class="page active">
<div id="userList">
<h2>Pojištěnci</h2>
<table>
<thead>
<tr>
<th>Jméno a příjmení</th>
<th>Telefon</th>
<th>Věk</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
<div id="userForm">
<h2>Nový pojištěnec</h2>
<form>
<table>
<tr>
<td>
<label for="jmeno">Jméno</label><br />
<input type="text" name="jmeno" />
</td>
<td>
<label for="prijmeni">Příjmení</label><br />
<input type="text" name="prijmeni" /><br />
</td>
</tr>
<tr>
<td>
<label for="vek">Věk</label><br />
<input type="number" name="vek" /><br />
</td>
<td>
<label for="tel">Telefon</label><br />
<input type="telnum" name="tel" /><br />
</td>
</tr>
<tr>
<td colspan="2">
<input type="button" value="Uložit" onclick="addUser(this.form)" />
</td>
</tr>
</table>
</form>
</div>
</div>
<div id="pageAbout" class="page hidden">
<h2>Výplod v0.1</h2>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
commodo consequat. Duis aute irure dolor in reprehenderit in voluptate
velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint
occaecat cupidatat non proident, sunt in culpa qui officia deserunt
mollit anim id est laborum.
</p>
</div>
</body>
</html>
To je zase náš slavný Montezo. Namatlá dohromady náhodné kusy kódu a baví se tím, jak se to snažíme pobrat.
Ještě tě to trolení nepustilo? Jdi s tím na psychinu.
Teda to HTML takhle není úplně pěkné, ale mně šlo o ten JS, abys mohl nějak začít.
<html>
<body>
<pre id="databaze"></pre>
<script>
class Pojistenec {
constructor(jmeno, prijmeni, vek, tel) {
this.jmeno = jmeno;
this.prijmeni = prijmeni;
this.vek = vek;
this.tel = tel;
}
toString() {
return `${this.tel}, ${this.jmeno} ${this.prijmeni}, ${this.vek}`;
}
}
let databaze = [
new Pojistenec('Jana', 'Svobodová', 24, '+420123456789'),
new Pojistenec('Jiří', 'Novák', 25, '+420123456790'),
];
databaze.push(new Pojistenec('Jan', 'Novotný', 26, '+420123456791'));
document.getElementById('databaze').innerText = databaze.join('\n');
</script>
</body>
</html>
Já řeším jen to, jak zachytit výstup té funkce, abys ho mohl dát do té proměnné $html. Charitativní úprava designu komerčního projektu je momentálně mimo můj zájem.
Když na té stránce na něco klikneš pravým tlačítkem, tak v nástrojích pro vývojaře uvidíš strukturu toho dokumentu, a co je co. To pak dohledej v tom zdrojáku a uprav si to, jak potřebuješ.
V principu by mohlo fungovat, když místo:
$html .="</h2>
<div id='playeroptions' class='{$ulclass}'><ul id='playeroptionsul' class='{$set_mode}'>";
Dáš:
$html .="</h2>";
ob_start();
doo_social_sharelink($post->ID);
$social_links = ob_get_clean();
$html .= $social_links;
$html .= "<div id='playeroptions' class='{$ulclass}'><ul id='playeroptionsul' class='{$set_mode}'>";
Ale nevím, co ta funkce generuje, a jestli v tom novém místě máš tu proměnnou $post, a tak. Bez širšího kontextu z tohodle moc nevykoukám.
Předpokládám, že ta funkce prostě vypíše ty linky a ty je teda z nějakého důvodu chceš mít v té proměnné. Tak můžeš použít output buffering.
ob_start();
doo_social_sharelink($post->ID);
$share_links = ob_get_clean();
...
$html .= $share_links;
Oops, jsem nepostřehl, že už jsi to vykoumal. Tak nic :-)
$nazev = 'nazev...';
$popis = 'popis...';
$url = '?nameid=' . urlencode($nazev) . '&popis=' . urlencode($popis);
$js = 'location.href=' . json_encode($url); // to v tomhle případě není nutné, když víš, že tam není nic problémového
$attr = htmlspecialchars($js, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401);
echo "<i class='nc-icon nc-settings-90' onClick='$attr'></i>";
Je to tabulka o skladovém místě, nebo o zboží? V obou případech má nesmyslnou strukturu.
"pocet prijatych jednotiek, pocet vyskladnenych poloziek, skladove miesto vyprazdnené"
Pokud chceš evidovat pohyby, tak to budou samostatné doklady - Příjemky, Výdejky, apod. Na skladě máš prostě nějaké množství něčeho. Takže taky nepotřebuješ samostatný sloupec na "vyprázdněnost". Ta hodnota buď je nebo není 0, hotovo.
Takže teda asi znáš SELECT a INSERT. Pak je ještě UPDATE:
UPDATE tabulka SET mnozstvi=mnozstvi-X where ID=Y
-- a jeste muzes pridat
AND mnozstvi>=X
Víc asi zatím nepotřebuješ. Akorát si možná nejdříve vyzkoušej nějaký existující skladový systém ať máš představu, co vlastně chceš dělat (a možná tě pak i pustí potřeba dělat vlastní ).
Na začátek přidej ještě
import os
Lazarus/FreePascal má režim kompatibility s Delphi. {$mode delphi} a {$mode delphiunicode}
Pokud použiješ komponentu s otevřeným kódem, tak je slušná šance, že ji v Lazaru rozchodíš.
Vypadá to, že Swagger pole objektů v query neumí (resp. to OpenAPI nedefinuje).
Ale ten query string by asi měl vypadat takhle, tak se ti to třeba podaří nějak znásilnit:
studentProperty[0].Teacher=aa&studentProperty[0].Grade=3
Ty příklady jsem napsal dost blbě :) Ale závěr platí.
V C se soubory kompilují po jednom a jen v rámci té jedné kompilace existují definy.
Takže ten "include guard" bude fungovat v takovéto situaci:
== core.h:
struct core {
int foo;
};
== utils.h
#include "core.h"
struct helper {
struct core core;
int bar;
}
== main.c
#include "core.h"
#include "utils.h"
======
Guardem se zabrání dvojitému includu "core" do Main.
Ale ne v této situaci:
== core.h
struct core {
int foo;
};
struct core main_core; // !!!
== utils.c
#include "core.h"
== main.c
#include "core.h"
======
Utils a Main se kompilují nezávisle a v obou bude stejná definice.
Zkrátka, jestli tam máš nějaké definice, tak je vyhoď do .c a v tom .h nech jen deklarace.
== neco.c
int odpoved = 42;
== neco.h
extern int odpoved;
if sum(kombinace) == 15:
neco
>>> s = "nazdar"
>>> s[0]
'n'
Těžko hádat bez kódu. Možná ti ten ajax vůbec neproběhne, nebo vrátí chybu. Na záložce "Network" by mělo jít vidět, jestli to něco dělá a s jakým výsledkem.
#7 Honza
Takže tím je to divný, nejprve používali novější GDI+ a pak kvůli kompatibilitě přešli na GDI?
GDI+ není novější v tom smyslu, že by nahrazovalo staré GDI (i když má nové fíčury), ale prostě existují paralelně. I když původní plán nejspíš byl, že všechno pěkně vymazlí a bude to paráda. Na GDI pak přešli kvůli výkonu, je to hnusný, ale rychlý :) Kompatibilita v názvu té property znamená jen to, že si můžeš zapnout vykreslování postaru.
Tak teď máš globální úplně všechno tak na jedné proměnné asi nesejde. Každopádně nemá smysl, aby ta funkce svůj výsledek někam ukládala misto, aby ho prostě vrátla returnem.
def kontrola_radku(hraci_plocha):
for i in range(3):
if hraci_plocha[i].count("X") == 3:
return "X"
if hraci_plocha[i].count("O") == 3:
return "O"
def kontrola(hraci_plocha):
return (
kontrola_radku(hraci_plocha)
or kontrola_sloupce(hraci_plocha)
or kontrola_diagonaly(hraci_plocha)
)
def main():
hraci_plocha = ...
while not (vitez := kontrola(hraci_plocha)):
# takhle je trochu blbé, že to udělá první kontrolu, i když ještě není co kontrolovat, ale na tom nesejde
# ...
print("vyhrál", vitez)
if __name__ == "__main__":
main()
Ve výsledku v obou případech používáš globální proměnnou, což je to čemu je dobré se vyhnout.
Pravděpodobně to půjde přesat třeba tímhle stylem:
while item := get_data():
doX(item)
doY(item)
for item in get_data():
doX(item)
doY(item)
Popiš víc, co konkrétně chceš dělat, pak se dá konkrétněji poradit.
1) Nebudeš dělat místo pro tlačítka, ale prostě tam vložíš tlačítka. Ale VBox teda vkládá widgety pod sebe, tak ta tlačítka můžeš ještě zabalit do HBoxu (vedle sebe) a ten pak vložit do VBoxu.
2) Netuším, co myslíš.
3) mělo by jít použít třeba metodu resize.
from PyQt6.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QHBoxLayout, QPushButton, QWidget
from matplotlib.backends.backend_qtagg import FigureCanvas
from matplotlib.figure import Figure
class ApplicationWindow(QMainWindow):
def __init__(self):
super().__init__()
self.resize(500, 500)
self._main = QWidget()
self.setCentralWidget(self._main)
vbox = QVBoxLayout(self._main)
hbox = QHBoxLayout()
for i in range(4):
button = QPushButton(f"Button {i}", self)
hbox.addWidget(button)
vbox.addLayout(hbox)
figure_canvas = FigureCanvas(Figure())
vbox.addWidget(figure_canvas)
ax = figure_canvas.figure.subplots()
x = y = [2, 4, 6, 8]
ax.plot(x, y)
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
win = ApplicationWindow()
win.show()
app.exec()
Nevím, jestli je backend_qt5agg použitelný s PyQt6 (zkus backend_qt6agg [netuším, jestli existuje] nebo backend_qtagg [bez čísla]). Ale jinak je to celé. Tak jak do toho okna vkládáš jiné widgety, tak stejně tam vložíš i ten FigureCanvas. A aby ti widgety reagovaly na změnu velikosti okna, tak je nebudeš pozicovat absolutně, ale použiješ nějaký layout manager.
Příklad je v dokumentaci.
Netuším, co u těch louží znamená ta hodnota 1000 a proč pak ty hodnoty testuješ místo abys ten interval rovnou definoval, jak ho chceš mít.
Jestli správně chápu, co chceš tím větším rozestupem louží, tak na to můžeš použít funci randrange(od, do, krok). Stejné parametry má i funkce range a můžeš je využít při kreslení příček toho žebříku.
A když je to program na podprogramy/funkce, tak je trochu k ničemu funkcí řešit jen jednu věc.
import random
import tkinter
def nakresli_dvojici_krapniku(canvas, x, delka, y_strop, y_podlaha):
x1, y1 = x, y_strop
x2, y2 = x, y_strop + delka
canvas.create_line(x1, y1, x2, y2, fill="green")
x1, y1 = x, y_podlaha - delka
x2, y2 = x, y_podlaha
canvas.create_line(x1, y1, x2, y2, fill="green")
def nakresli_louzi(canvas, x, y, sirka, vyska):
vlevo, vpravo = x, x + sirka
nahore, dole = y, y + vyska
canvas.create_oval(vlevo, nahore, vpravo, dole, fill="blue")
def nakresli_zebrik(canvas, x, y, sirka, vyska, rozestup):
vlevo, vpravo = x, x + sirka
nahore, dole = y, y + vyska
canvas.create_line(vlevo, nahore, vpravo, nahore, fill="brown", width=3)
canvas.create_line(vlevo, dole, vpravo, dole, fill="brown", width=3)
for pricka in range(vlevo + rozestup, vpravo, rozestup):
canvas.create_line(pricka, nahore, pricka, dole, fill="brown", width=3)
# zacatek
canvas_width, canvas_height = 700, 400
canvas = tkinter.Canvas(width=canvas_width, height=canvas_height)
canvas.pack()
# krapniky
for x in range(canvas_width):
delka = random.randint(20, 70)
nakresli_dvojici_krapniku(canvas, x, delka, 0, canvas_height)
# louze
pocet = random.randint(10, 20)
for i in range(pocet):
x = random.randrange(100, canvas_width - 100, 50) # střílím od boku. netuším, jak toto chceš mít
y = random.randrange(100, canvas_height - 100, 50)
sirka = random.randint(20, 100)
vyska = random.randint(20, 100)
nakresli_louzi(canvas, x, y, sirka, vyska)
# zebrik
nakresli_zebrik(canvas, 0, 150, canvas_width, 70, 70)
tkinter.mainloop()
for x in range(50):
^
Ta funkce jen nakreslí dvě čáry. Když si ji přečteš, tak přece musíš hned vidět význam těch parametru.
Ta funkce prostě dostává nějaké parametry. Jeden z nich je canvas, na který má kreslit.
Obě čáry uvidíš, když parametr pro pozici podlahy upravíš tak, aby odpovídal tomu, jak velký máš canvas.
def nakresli_dvojici_krapniku(canvas, x, delka, y_strop, y_podlaha):
x1, y1 = x, y_strop
x2, y2 = x, y_strop + delka
canvas.create_line(x1, y1, x2, y2, fill="green")
x1, y1 = x, y_podlaha - delka
x2, y2 = x, y_podlaha
canvas.create_line(x1, y1, x2, y2, fill="blue")
# ...
delka = random.randint(20, 70)
nakresli_dvojici_krapniku(canvas, x, delka, 10, 390)
Souřadnice jsou 0,0 vlevo nahoře a rostou směrem doprava a dolů. Tak je zadáš tak, jak je chceš mít a uděláš ty čáry dvě. Na vygenerování té delky můžeš použít třeba metodu randint z modulu random.
nevím kam to mám napsat
Jakpak je to možné?
Tak vygeneruješ tu délku krápniku od 20 do 70 a pak stejně dlouhou čáru nakreslíš na obě strany.
Něco ve stylu nahoře od 0 do délkakrápníku a pak dole od výškaplátna-délkakrápníku do výškaplátna.
To RGB jsou jednotlivé barevné komponenty (red, green, blue) výsledné barvy.
Jasně tam vidíš červený, zelený a modrý pruh. To mezi tím je přechod mezi těmi barvami. Takže třeba mezi červenou a zelenou začínáš na plně červené, chvíli přidáváš zelenou (z červené vzniká žlutá) a pak zase ubíraš červenou (ze žluté vzniká zelená). Podobně pro další přechody.
Nevím, jestli záleží na tom, jak konkrétně budete ten přechod generovat, ale ta ukázka vypadá na cosinus.
A nakonec je tam to, že dolní pixely jsou tmavší než horní. Nejspíš to půjde celé nacpat do jedné šikovné rovnice, ale je to jen primitivní šaškování se třemi čísly.
Jestli potřebuješ poradit víc, tak napiš, co konkrétně máš a co nevíš a nechoď sem jen se zadáním. Ve školách se prostě nedávají úkoly na věci, co nemůžete znát a jestli dostávate všichni koule, tak jste všichni dementi.
S čím konkrétně si nevíš rady?
Neni v tom zadny rozdil?
Do "text\ntext" jde vkladat zalamovani radku pres \n.
To platí třeba v PHP nebo Perlu. Kód v dotazu je JavaScript a tam mezi ' a " není rozdíl.
Proč nenapíšeš přímo to, co chceš vědět? Jaký je rozdíl mezi řetězcovými konstantami definovanými v apostrofech a uvozkovkách. Žádný.
table_data = []
for row in data:
if zs in row[5]:
table_data.append(row)
Nebo úsporněji:
table_data = [row for row in data if zs in row[5]]
Ale to už napsal Pavel. Já jsem chtěl doplnit, že i v té šabloně renderuješ jen jeden řádek.
{% for row in data %}
<tr>
{% for cell in row %}
<td>{{ cell }}</td>
{% endfor %}
</tr>
{% endfor %}
Jo, ty registry se "překrývají" a jen ah je "posunutý".
6 5 4 3 2 1
4321098765432109876543210987654321098765432109876543210987654321
^------------------------------rax-----------------------------^
^--------------eax-------------^
^------ax------^
^--ah--^^--al--^
Ale, když na 64b systému zapíšeš do 32b registru, tak se horních 32b vynuluje.
mov rax,0xfffffffffffffff0 ; rax = 0xfffffffffffffff0
or al,1 ; rax = 0xfffffffffffffff1
or ax,2 ; rax = 0xfffffffffffffff3
or eax,4 ; rax = 0xfffffff7 !
or rax,8 ; rax = 0xffffffff
To je ten selektor.
Kompletní adresa má formát segment:offset a výsledek je segment+offset. V 32-bit režimu jsou místo segmentů selektory, takže je to selektor:offset a výsledek je bázová_adresa_selektoru+offset. Ta bázovka je definovaná v těch deskriptorech v GDT/LDT.
A většinou se pracuje jen s offsety, tj. selektor se nemění a je dán prováděnou instrukcí (kód je na cs:xxx, data jsou na ds:xxx, zásobník je na ss:xxx, ...). Když se někde píše, že adresa aktuálně prováděné instrukce je v registru eip (nebo ip/rip, teď jsme ve 32-bit, tak eip), tak ve skutečnosti je to cs:eip, ale cs nás nezajímá.
Takže pro jmp většinou definuješ jen offset:
jmp offset
; eip = offset
Ale můžeš uvést i kompletní adresu:
jmp selektor:offset
; cs = selektor
; eip = offset
Ten selektor má nějaký význam/formát a ve tvém případě je to teda 1<<3 (čili 8, nebo binárně 1000), což znamená toto:
DDDDDDDDDDDDDPPT
0000000000001000
D = deskriptor 1
P = privilege level 0 (to je na další povídání)
T = table 0 (GDT)
Takže v pseudokódu to jakoby dělá toto:
jmp GDT[1]:start32
A i mně to "zavání" Montezem.
Při učení od začátku se naučíš, že instrukce jmp skočí na zadanou adresu a assembler, také zvaný jazyk symbolických adres, mimo jiné umožňuje místo adres psát symboly, které je ovšem potřeba nejdříve definovat.
...
jmp mujlabel
...
mujlabel:
; sem to skoci
Tady je far jump s uvedením selektoru, který je definovaný v GDT (s komentářem x32 code descriptor), ale výsledek je stejný.
Kompletní kód po kompilaci nepřilinkuješ "někam", ale zapíšeš ho do boot sektoru disku, ze kterého nabootuješ. Proces zavádění systému je opět potřeba nejdříve nastudovat. Nicméně v téhle fázi to nic nedělá.
Nejde vzít náhodných 10 řádků z třetí kapitoly nějaké knihy a jaksi magicky to rozchodit.
Není možné, aby ses se za tu dobu, co sem chodíš, nenaučil vůbec nic. Chodíš sem jen trollit. Tak si užij nedělní večer, čau.
Tak to máš veliké štěstí, protože v mojí odpovědi máš jejich řešení.
Takže jsi typ toho parametru změnil z int na DateTime. OK
A pak jsi ještě zrušil metodu Main. Proč?
A co ti v tom brání?
Rozměry pole se nezadávají jakou double. Tj. ne [10.0, 10.0] ale [10, 10]. A pokoušíš se definovat pole 10x10, ale incializuješ ho hodnotami 10x2.
Při přístupu k hodnotám pole se jako indexy také nepoužívají doubly a to pole je přece dvourozměrné. Takže ne [double], ale [int,int].
date = d;
Pokoušíš se přiřadit int do DateTime. Je snadné na to přijít, protože přesně to se píše v chybové hlášce.
Dvourozměrné pole je jako pole polí, tj pole jehož položky jsou zase pole.
Takže nejdřív ti to vytvoří pole s 16 položkami.
triangle = {
/* 0*/ null,
/* 1*/ null,
/* 2*/ null,
...
/*15*/ null,
}
Pak to tohle pole projde a naplní ho hodnotami (těmi vnitřními poli s délkou a obsahem podle aktuálního indexu).
triangle = {
/* 0*/ {0},
/* 1*/ {0,1},
/* 2*/ {0,1,2},
...
/*15*/ {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15},
}
Konstrukce for (X : Y) provede tělo cyklu pro každý prvek kolekce Y s tím, že aktuální prvek je v X. Takže to projde položky vnějšího pole (což jsem teda zase pole) a pak položky toho vnitřního pole (inty) a vypíše je.
Otazníky za printem a dotaz, jak zavolat metodu mě vytáčí. Prošel jsi několika programovacími jazyky a roky se ptáš na základní věci, které všude fungují stejně.
Tak nebudeš barvu určovat podle toho, jestli je kulička napravo nebo nalevo, ale podle toho, jestli je nahoře nebo dole.
Místo X budeš testovat Y.
Obdélník je definovaný souřadnicemi (x1, y1, x2, y2). S čím potřebuješ poradit?
Když je X vetší nebo rovno 190, tak uděláš kuličku červeně, jinak modře. Takže napravo máš červené a nalevo modré.
Co na tom změnit? Peter už ti odpověděl. Budeš testovat Y.
In [1]: len("hrcprc")
Out[1]: 6
In [2]: "hrcprc".count("r")
Out[2]: 2
V GIS se z výškových dat dělá tzv. hillshade, možná by ti to mohlo stačit a umí to třeba GDAL. Není úplně rychlý, ale jde to.
gdaldem hillshade inheightmap.png -of PNG outshade.png
# + případně další parametry na umístění zdroje světla
Pak vím, že třeba POV-Ray umí vyrenderovat výškovou mapu. Ten nemám nainstalovaný a z hlavy to nedám, ale je to příkaz height_field. To je teda ray tracer a taky nebude rychlý.
Parallax mapping je jen takové šizení světla na placaté textuře, ale ty obrázky, jak je máš tady by to mělo zvládnout. Nemusíš se nic moc učit, jen najdi nějaký ukázkový program, který to dělá a místo textury dej šedý čtverec a místo height mapy tu svoji.
Koukl jsem na to jen rychle, tak si nejsem jistý, ale zdá se mi, že to negeneruje přímo Astra. Nemáš tam aktivní ještě nějaký plugin?
Přinejhorším je to v samostatném divu, tak by měl jít pomocí CSS skrýt.
Mně to zní tak, že máš ten server pod kontrolou, tak tam asi můžeš implementovat i ukládání a stahování toho obsahu.
Jinak jak píše Peter, přímo do souboru zapisovat nemůžeš, ale můžeš to ukládat v prohlížeči a pak stáhnout (Blob + window.URL.createObjectURL).
Nebo teda varianta asi stravitelnější pro začátečníka:
puvodni = [2,4,3,1]
zamichany = puvodni[:]
random.shuffle(zamichany)
pozice = []
for hodnota in puvodni:
pozice.append(zamichany.index(hodnota) + 1)
print("puvodni ", puvodni)
print("zamichany", zamichany)
print("pozice ", pozice)
list má metodu index, která vrátí pozici zadané hodnoty
pozice = [zamichany.index(hodnota) + 1 for hodnota in puvodni]
Ty plochy si můžeš definovat jak chceš, já ani ty možnosti pořádně neznám. Toto mi připadá jednoduché:
# grid 2x10 a která políčka obsadit
ax1 = plt.subplot(2, 10, (1, 7))
ax2 = plt.subplot(2, 10, (11, 20))
StandardError
wget vypisuje na stderr a jde to změnit parametrem -o-.
List se indexuje od 0 a k ničemu ho nepotřebuješ. Na vracení hodnot z funkce je příkaz return.
def getdata():
ser.reset_input_buffer()
ser.write(b"r")
serial_data = ser.read(SAMPLES * 4)
unpacked_data = s.unpack(serial_data)
ser.close()
return unpacked_data
To FFT máš skoro správně. Zkus to spustit a poopravuj, to co řve :)
import random
import matplotlib.pyplot as plt
from matplotlib.widgets import Button
def getdata():
return (
[random.random() for _ in range(100)],
[random.random() for _ in range(100)]
)
def update(event):
set1, set2 = getdata()
line1.set_ydata(set1)
line2.set_ydata(set2)
plt.draw()
fig, (ax1, ax2) = plt.subplots(2)
set1, set2 = getdata()
line1, = ax1.plot(set1)
line2, = ax2.plot(set2)
btnax = plt.axes([0.4, 0.9, 0.2, 0.1])
button = Button(btnax, 'Update')
button.on_clicked(update)
plt.show()
eval(f"TEST_{i}")
Ale takové brikule se nedělají. Použij něco "normálního"
test = [10, 20]
test[0] # 10
test[1] # 20
#8 Montezo
To je přesně ten problém. Nechápeš na tom kódu ani písmenko, že to je jméno třídy, že ji nejdřív musí někdo napsat. Desetkrát ti může člověk vysvětlit, jak to funguje a ty se znova zeptáš, proč někde nějaká třída není vidět a čekáš kouzelnou radu bez toho, že bysme ten kód viděli. Takže zpátky k tomu telefonnímu seznamu.
Odkud to máš?
Ptáš se pořád na to samé.
Čínsky se nenaučíš tak, že budeš zírat na čínský text. Šachy se nenaučíš tak, že budeš hrát s velmistrem. Prostě musíš projít postupným učením.
Já jsem si myslel, že jako zralý chlap s jasným cílem (mně je taky přes 40) se tomu budeš systematicky věnovat a i když na to třeba máš čas jen pár hodin o víkendu, tak to dáš. Ale ty po buhví jak dlouhé době nedáš dokupy pár příkazů, děcka se ti tady smějou a ty místo, aby ses nasral a máknul, tak pořád vymýšlíš koniny.
Buď vrtáš do hotového projektu, tak tam není potřeba doplňovat usingy. Nebo to smolíš sám a tu třídu tam prostě nemáš.
Tak dej odkaz na ten skript a já se podívám, jak funguje.
Nějaký projekt eshopu má nějakou třídu Product. Co čekáš, že ti k tomu Google řekne?
Udělej si telefonní seznam, nebo piškvorky, nebo prostě něco pro začátečníky a nevrtej se v kódu, kde nechápeš ani řádek.
A syntaxi už ses naučil? Nehodila by se tam někam složená závorka?
A na serverý projekt prostě nemáš, tak to nedělej.
Find in files (ctrl+shift+f)
Třeba se vrať ve svých studijních materiálech o 15 kapitol zpátky.
Když třeba v namespace "Hrc" implementuješ třídu "Prc", tak její celé jméno je "Hrc.Prc". Nebo můžeš použít "using Hrc" a pak psát jen "Prc", protože using definuje, ve kterých "jmenných prostorech" se mají vyhledávat "jména".
Takže těch usingů je nekonečně mnoho, protože každý si může věci pojmenovat libovolně. A můžeš Hrc nebo Prc zkoušet do aleluja a nebude to fungovat, dokud překladač nemá jejich implementaci.
Což je jedna z věcí, kterou najdeš v popisu toho chybového kódu. Zřejmě ti chybí nějaké závislosti.
Jak, co z toho? Třída implementující nějaký interface musí implementovat metody definované v tom interface.
Nevím, možná je toto příliš brzy. Takhle se to spustí až když se všechno načte:
$(window).on("load", function() {
route.scrn([200, 50, 50, 50, 200]);
});
Jinak se zeptej autora "routescrn.js" jak se má používat.
Teď ti to při kliknutí vytáhne z toho elementu text a spustí ho jako skript. Tak ho spusť rovnou.
<script type="text/javascript">
$(function() {
route.scrn([200, 50, 50, 50, 200]);
});
</script>
To je jen jako nápověda pro editor, že ten blok kódu patří k sobě a pak jde ten region vizuálně sbalit a rozbalit.
A pokud teda chceš zachovat to, že ten kód je v divu a zároveň ho chceš spustit, tak ten kód nemusíš psát dvakrát. Třeba takhle:
<script type="text/javascript">
$(function() {
var code = $("#iddivuskodem").text();
eval(code);
});
</script>