Amerikanci i VW
- Zmaj021
- Posts: 3509
- Joined: 25 Oct 2011, 17:51
- Pero
- Posts: 2161
- Joined: 24 Feb 2012, 09:12
I taj softver, na osnovu senzora koji izgleda ipak postoje, smanjuje količinu NOx djelujući na omjer smjese diesela i zraka i vrijeme ubrizgavanja 10 i više puta. Tebi je to sve jasno. Ja sam malo priglup, pa mi nije. Što ćeš - ti si iz članaka na internetu izvukao zaključak koji je meni malo čudnovat, ali takvi su ljudi.Zmaj021 » wrote: nigdje nisam rekao bez senzora, samo sam rekao da ih ne treba izmišljat. wss postoji odavno i imaš test koji se radi po onim grafovima, gdje se određena brzina postiže i održava u određenim vremenskim intervalima. sad ti meni reci jel to već dovoljna osnova za ideju kako samo na osnovu toga napraviti softver.. sve preko što ima, super, vjerovatno se može iskoristit, al i ovo je dovoljno, bar liči.
matrica ti je data i treba da je prepoznaš. ne znam šta je problem..
očitavaš senzor, detektuješ odstupanja od zadatih konstanti, računaš neku težinsku grešku uzimajući u obzir i vremenski okvir, itd.
nije poso od po sata, al nije ni rokit sajens.
opet, to je jedna od ideja, iz rukava.. dakle da ponovim, iz rukava.
šta ti čitaš i shvataš preozbiljno, druga je stvar.
- Zmaj021
- Posts: 3509
- Joined: 25 Oct 2011, 17:51
ma jok, ba.. mijenja se geometrija motora.Pero wrote: I taj softver, na osnovu senzora koji izgleda ipak postoje, smanjuje količinu NOx djelujući na omjer smjese diesela i zraka i vrijeme ubrizgavanja 10 i više puta. Tebi je to sve jasno. Ja sam malo priglup, pa mi nije. Što ćeš - ti si iz članaka na internetu izvukao zaključak koji je meni malo čudnovat, ali takvi su ljudi.
- Zmaj021
- Posts: 3509
- Joined: 25 Oct 2011, 17:51
što bi se brinuo? za brigu je kad ti potrošnja skoči van uobičajenih vrijednosti.Pero » wrote: Nego ja vozim dizela koji je kao EURO5 i troši brat-bratu 20% više nego što mu je deklarirano i nije iz VW koncerna. Jel se i ja trebam zabrinut ko miki za svoju Škodu?
..a i teško je skontat koliko bi bilo ok. ono, hrpa je faktora tu: loše gorivo, loši brojači na pumpama, odometar laže, stil vožnje, uslovi vožnje..
litar na pet nije previše.
probaj pronać neki forum, pa uporedit.
meni potrošnja u gradu maltene ne odstupa od deklarisane. za izvangradsku piše 5,7, a meni je minimala bila 6,3 na putu ns-sa-ns, znači, maltene bez autoputa, al po selima i planinama i nešto gradske vožnje po sa. mjereno dopunjavanjem goriva do vrha i lažljivim odometrom.
dva puta.
kad idem van države, onda bude oko 8, al to je skoro isključivo autoput, do 130 km/h.
..ne računajući njemačku, tu bome skoči. razbahatim se samo tako..
Ukuca sam broj sasije na skodinu stranicu, i pise da mi je skodilac zdrav
- Pero
- Posts: 2161
- Joined: 24 Feb 2012, 09:12
Evo ovi tvrde da ti Škodilak izgleda ipak nije zdrav:
http://www.telegraph.co.uk/finance/news ... tware.html
Oš tužit VW da ti Škodu zamijene s BMW-om?
http://www.telegraph.co.uk/finance/news ... tware.html
Oš tužit VW da ti Škodu zamijene s BMW-om?
A kako bas znas da je i moja skoda ukurcuPero » wrote:Evo ovi tvrde da ti Škodilak izgleda ipak nije zdrav:
http://www.telegraph.co.uk/finance/news ... tware.html
Oš tužit VW da ti Škodu zamijene s BMW-om?
Inace sam na onom tamo forumu procita da motori od iljadu sesto kubika zahtjevaju kompliciranu doradu jer se treba svasta nesto u motoru doradit-odeardit, dok u 2,0 ne treba zadirat u motor .ne zna:
A kako bas znas da je i moja skoda ukurcuPero » wrote:Evo ovi tvrde da ti Škodilak izgleda ipak nije zdrav:
http://www.telegraph.co.uk/finance/news ... tware.html
Oš tužit VW da ti Škodu zamijene s BMW-om?
Inace sam na onom tamo forumu procita da motori od iljadu sesto kubika zahtjevaju kompliciranu doradu jer se treba svasta nesto u motoru doradit-odeardit, dok u 2,0 ne treba zadirat u motor
- Pero
- Posts: 2161
- Joined: 24 Feb 2012, 09:12
Ne znam, ovi pišu i o Škodama i ne prave razliku jel motor 1.6 ili 2.0. A zašto misliš da ne bi varali na jačem motoru koji logično proizvodi i više CO2 i NOx?miky0 » wrote:
A kako bas znas da je i moja skoda ukurcu
Inace sam na onom tamo forumu procita da motori od iljadu sesto kubika zahtjevaju kompliciranu doradu jer se treba svasta nesto u motoru doradit-odeardit, dok u 2,0 ne treba zadirat u motor
Ne kazem da ne bi varali, samo kazem da je ispravak kod jaceg motora jednostavniji, dok je u slabijeg kompliciraniji jer zahtjeva nekakve radnje unutar samog motora. Navodno.Pero » wrote: Ne znam, ovi pišu i o Škodama i ne prave razliku jel motor 1.6 ili 2.0. A zašto misliš da ne bi varali na jačem motoru koji logično proizvodi i više CO2 i NOx?
Inace, ako moju skodu trebaju tako ispizdit, ne zelim takav auto. Ko zna koliko ce onda imat slabije reference.
-
- Posts: 3065
- Joined: 09 Dec 2011, 17:15
Ja nisam više tako ni mlad, ali evo za pola minute mozganja mislim da imam rješenje.Pero » wrote:Dobro, ja sam kao nodens, a ti pomalo priznaješ da ti za softver koji bi časkom napravio za VW trebaju neki senzori. Ne njih puno, al ti trebaju. Nisi baš stoposto siguran koji su ti potrebni da specificiraš hardversku konfiguraciju al da ti daju u ruke da im napišeš softver, ti bi iz priloženih dijagrama testiranja to napravio u čas posla. Meni je svojedobno trebalo jedno tjedan dana da u C-u napišem algoritam koji određuje da li je točka unutar ili izvan proizvoljno zadanog poligona sa proizvoljnim brojem vrhova i to još kad sam bio mlad. Al gdje bih se ja mogao mjeriti s tobom.
Znači, imaš neku točku, i proizvoljni broj vrhova, poredanih tako da tvore bilo kakav poligon. Može biti i konkavan, no nagađam da se valjda ne mogu bridovi poligona 'sjeći'. (ako mogu, onda ovo dolje rješenje mislim da ne bi ferceralo)
Evo ti algoritam:
1. Nađeš bilo koju točku koja se nalazi izvan poligona (npr. zato što su joj obje koordinate manje od minimalne dotične koordinate svih vrhova). Ta točka skupa s točkom koja se testira, tvori 'testnu dužinu'.
2. Za sve bridove poligona (od točke n. do n+1) pogledaš siječe li se taj brid s testnom dužinom.
3. Ako testna dužina siječe neparni broj bridova, onda je točka unutar poligona, inače je izvan.
Ako se testna dužina točno preklapa s bilo kojim bridom, onda ima 2 mogućnosti: ako je testna točka baš na tom bridu, onda se može valjda računati da je 'unutar' poligona; a ako nije na tom bridu, nego je brid sadržan u testnoj dužini (to je jedina druga mogućnost s obzirom da je točka iz prvog koraka izvan cijelog poligona), onda dotični brid treba ignorirati (kao da se ne siječe, ne mijenja 'parnost' iz trećeg koraka).
Što ti se čini? Nisam doduše provjerio bi li ovo radilo, no ovako napamet mi se čini da bi svakako moralo, ne vjerujem da bi mi trebalo više od pol sata za to iskodirat.
- Pero
- Posts: 2161
- Joined: 24 Feb 2012, 09:12
Bridovi poligona se mogu sjeći - zapravo možeš imati sastav od više nezavisnih poligona koji se dodiruju u jednoj točki ili stranici. Sve ovisi o poretku vrhova u ulaznoj tablici.nodens » wrote:
Znači, imaš neku točku, i proizvoljni broj vrhova, poredanih tako da tvore bilo kakav poligon. Može biti i konkavan, no nagađam da se valjda ne mogu bridovi poligona 'sjeći'. (ako mogu, onda ovo dolje rješenje mislim da ne bi ferceralo)
-
- Posts: 3065
- Joined: 09 Dec 2011, 17:15
Hm ok, (iako si to trebao napomenuti)
Dakle, trebalo bi se prvo naći skup 'svih' bridova, tako što nađeš eventualna sjecišta bilo koja 2 brida (to bi onda bilo O(n^2) sporo), ta sjecišta onda postaju novi vrhovi, čini mi se da bi algoritam i tako funkcionirao. Jer, ako ti novi bridovi sačinjavaju npr. 2 poligona koji se 'dodiruju' u nekoj točki sjecišta 2 brida, opet vrijedi da bi točka 'unutar' bilo kojeg od tih dodirujućih poligona, morala sjeći neparni broj bridova kad 'odlazi ravnom linijom u beskonačnost'. A ti svi proračuni sjecišta su relativno jednostavna analitička geometrija, istina je da sam to sve pozaboravljao no nagađam da bih se lako ufurao natrag u to.
S tim da bi se moralo posebno provjeravati jesu li ta sjecišta točno u nekom od vrhova, pa ih ne računati 2 puta nego samo jednom. Enivej, nije trivijalno... no kako si ti to onda riješio, na kraju?
Dakle, trebalo bi se prvo naći skup 'svih' bridova, tako što nađeš eventualna sjecišta bilo koja 2 brida (to bi onda bilo O(n^2) sporo), ta sjecišta onda postaju novi vrhovi, čini mi se da bi algoritam i tako funkcionirao. Jer, ako ti novi bridovi sačinjavaju npr. 2 poligona koji se 'dodiruju' u nekoj točki sjecišta 2 brida, opet vrijedi da bi točka 'unutar' bilo kojeg od tih dodirujućih poligona, morala sjeći neparni broj bridova kad 'odlazi ravnom linijom u beskonačnost'. A ti svi proračuni sjecišta su relativno jednostavna analitička geometrija, istina je da sam to sve pozaboravljao no nagađam da bih se lako ufurao natrag u to.
S tim da bi se moralo posebno provjeravati jesu li ta sjecišta točno u nekom od vrhova, pa ih ne računati 2 puta nego samo jednom. Enivej, nije trivijalno... no kako si ti to onda riješio, na kraju?
-
- Posts: 5232
- Joined: 07 Oct 2011, 15:32
Dobra ideja. Meni je palo napamet da ne idem po bridovima nego po kutovima. Kompliciranije od ovoga, ali mislim da mi se isto moglo napravit da radi za svakakve poligone.nodens » wrote:
Ja nisam više tako ni mlad, ali evo za pola minute mozganja mislim da imam rješenje.
Znači, imaš neku točku, i proizvoljni broj vrhova, poredanih tako da tvore bilo kakav poligon. Može biti i konkavan, no nagađam da se valjda ne mogu bridovi poligona 'sjeći'. (ako mogu, onda ovo dolje rješenje mislim da ne bi ferceralo)
Evo ti algoritam:
1. Nađeš bilo koju točku koja se nalazi izvan poligona (npr. zato što su joj obje koordinate manje od minimalne dotične koordinate svih vrhova). Ta točka skupa s točkom koja se testira, tvori 'testnu dužinu'.
2. Za sve bridove poligona (od točke n. do n+1) pogledaš siječe li se taj brid s testnom dužinom.
3. Ako testna dužina siječe neparni broj bridova, onda je točka unutar poligona, inače je izvan.
Ako se testna dužina točno preklapa s bilo kojim bridom, onda ima 2 mogućnosti: ako je testna točka baš na tom bridu, onda se može valjda računati da je 'unutar' poligona; a ako nije na tom bridu, nego je brid sadržan u testnoj dužini (to je jedina druga mogućnost s obzirom da je točka iz prvog koraka izvan cijelog poligona), onda dotični brid treba ignorirati (kao da se ne siječe, ne mijenja 'parnost' iz trećeg koraka).
Što ti se čini? Nisam doduše provjerio bi li ovo radilo, no ovako napamet mi se čini da bi svakako moralo, ne vjerujem da bi mi trebalo više od pol sata za to iskodirat.
-
- Posts: 3065
- Joined: 09 Dec 2011, 17:15
MightyMe » wrote: Dobra ideja. Meni je palo napamet da ne idem po bridovima nego po kutovima. Kompliciranije od ovoga, ali mislim da mi se isto moglo napravit da radi za svakakve poligone.
Usput sam još malo ovlaš razmišljao i algoritam fulava u slučaju da testna dužina točno prolazi kroz neki od vrhova. Te slučajeve bi trebalo posebno hendlat da se ustanovi jel ta točka 'siječe' kut koji zatvaraju dva brida (onda se broji 'jednom') ili pak 'dodiruje' taj kut (onda dvaput, tj. nijednom).
Pitam se je l' to uopće potrebno ili bi se moglo heuristički, onak, uzet 'random' točku izvan 'bounding rectangle' od poligona, pa ako se slučajno testna dužina dodiruje s bilo kojim od vrhova, onda naprosto uzeti drugu slučajnu točku. Čini mi se da je vjerojatnost tog slučaja toliko mala da bi već za 2-3 iteracije postala nanoskopski mala
A u tom slučaju, nije uopće ni potrebno tražiti eventualna sjecišta bridova. Jer, ako testna dužina nekim slučajem čak i prolazi točno jednim od tih sjecišta, to znači da prolazi 'točno između' dva dodirujuća poligona, a tada je sasvim ok da se računa kao da 'siječe 2 brida'. Nego dakle, dovoljno je odabrati slučajnu točku izvan bounding rectangle svih vrhova, provjeriti prolazi li dužina od te točke do testne kroz bilo koji od vrhova, pa ako prolazi - uzeti drugu slučajnu točku... i onda ono dalje. Pogledati koliko bridova siječe, ako je neparan broj - točka je unutar poligona.
-
- Posts: 5232
- Joined: 07 Oct 2011, 15:32
Pa i nije to toliko kompliciran slučaj. Budući da funkcija koja bi gledala sijeku li se dužine mora znat početnu i krajnju točku brida, to je jednostavno detektirat. Najjednostavnije rješenje bi bilo onda da izađe iz svega i da random izabere novu točku. Ili možeš malo komplicirat pa da ti ta funkcija vraća točno kroz koji vrh prolazi pa da onda ne provjeravaš drugi brid. Ali to nije u dugu prethodnog koda koji radi na KISS principu.
-
- Posts: 3065
- Joined: 09 Dec 2011, 17:15
LOL, radi.
Paz kak sam lijepo našao jel se dvije dužine sijeku. Prvo sam htio čisto onako - analitička geometrija, jednadžbe pravca, rješavanje sustava jednadžbi i provjera rubova - no onda bih morao petljat s realnim brojevima, ovako je sve lijepo integer. To je ova metoda 'edgeIntersectsWith'.
A evo i male klase za vizualno testiranje ovog gore:
Code: Select all
package hr.abf.example;
import java.awt.Point;
import java.awt.Rectangle;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
public class Polygon implements Iterable<Point> {
private List<Point> vertices;
public Polygon() {
vertices = new ArrayList<Point>();
}
public void reset() {
vertices.clear();
}
public void addVertex(Point v) {
vertices.add(v);
}
public int count() {
return vertices.size();
}
@Override
public Iterator<Point> iterator() {
return vertices.iterator();
}
public boolean contains(Point tp) {
if (edgesContain(tp)) return true;
Rectangle bounds = findBoundingRectangle();
Point out = getRandomPointOutside(bounds);
while (vertIntersectsWith(tp, out))
out = getRandomPointOutside(bounds);
int intersections = 0;
Point lv = null;
for (Point v: vertices) {
if (lv != null && edgeIntersectsWith(lv, v, tp, out))
++intersections;
lv = v;
}
if (edgeIntersectsWith(lv, vertices.get(0), tp, out))
++intersections;
return intersections % 2 == 1;
}
private boolean edgesContain(Point p) {
Point lv = null;
for (Point v: vertices) {
if (lv != null && lineContainsPoint(lv, v, p)) return true;
lv = v;
}
return lineContainsPoint(lv, vertices.get(0), p);
}
private Rectangle findBoundingRectangle() {
if (vertices.size() == 0) return new Rectangle(0, 0, 0, 0);
int minx = vertices.get(0).x, miny = vertices.get(0).y;
int maxx = minx, maxy = miny;
for (Point v: vertices) {
if (v.x < minx) minx = v.x;
if (v.x > maxx) maxx = v.x;
if (v.y < miny) miny = v.x;
if (v.y > maxy) maxy = v.x;
}
return new Rectangle(minx, miny, maxx - minx, maxy - miny);
}
private Point getRandomPointOutside(Rectangle bounds) {
Random r = new Random();
int dx = r.nextInt(bounds.width), dy = r.nextInt(bounds.height);
if (r.nextBoolean()) {
dy += bounds.y;
dx = (dx < bounds.width / 2) ? bounds.x - 1 - dx : bounds.x + bounds.width / 2 + 5 + dx;
} else {
dx += bounds.x;
dy = (dy < bounds.height / 2) ? bounds.y - 5 - dy: bounds.y + bounds.height / 2 + 5 + dy;
}
return new Point(dx, dy);
}
private boolean lineContainsPoint(Point from, Point to, Point p) {
return p.x >= Math.min(from.x, to.x) && p.x <= Math.max(from.x, to.x) &&
p.y >= Math.min(from.y, to.y) && p.y <= Math.max(from.y, to.y) &&
isParallelWith(p, to, from, to);
}
private boolean vertIntersectsWith(Point from, Point to) {
for (Point v: vertices)
if (lineContainsPoint(from, to, v)) return true;
return false;
}
private boolean edgeIntersectsWith(Point v1, Point v2, Point from, Point to) {
if (isParallelWith(v1, v2, from, to)) return false;
return isPointBelow(v1, from, to) != isPointBelow(v2, from, to) &&
isPointBelow(from, v1, v2) != isPointBelow(to, v1, v2);
}
private boolean isParallelWith(Point v1, Point v2, Point from, Point to) {
return (v1.y - v2.y) * (from.x - to.x) == (v1.y - v2.x) * (from.y - to.y);
}
private boolean isPointBelow(Point p, Point from, Point to) {
return (p.y - from.y) * (from.x - to.x) - (from.y - to.y) * (p.x - from.x) > 0;
}
}
A evo i male klase za vizualno testiranje ovog gore:
Code: Select all
package hr.abf.example;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Poly extends JFrame {
private Polygon main = new Polygon();
private View scr = new View();
private JLabel status = new JLabel();
private JButton start = new JButton("Reset");
private JButton test = new JButton("Test");
private boolean testing = false;
private Point last = null;
public Poly() {
setLayout(new BorderLayout());
scr.setPreferredSize(new Dimension(800, 600));
JPanel up = new JPanel(new FlowLayout());
up.add(start);
up.add(test);
getContentPane().add(scr);
getContentPane().add(up, BorderLayout.NORTH);
getContentPane().add(status, BorderLayout.SOUTH);
test.setEnabled(false);
start.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
main.reset();
testing = false;
last = null;
scr.repaint();
status.setText("");
test.setEnabled(false);
}
});
test.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
testing = true;
scr.repaint();
status.setText("");
test.setEnabled(false);
}
});
scr.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (testing) testPoint(e.getPoint());
else {
main.addVertex(e.getPoint());
if (main.count() > 2) test.setEnabled(true);
scr.repaint();
}
}
});
}
void testPoint(Point p) {
last = p;
scr.repaint();
status.setText("The point is" + (main.contains(p) ? "" : " NOT") + " inside the polygon");
}
Point getLastPoint() {
return last;
}
public static void main(String[] args) {
Poly p = new Poly();
p.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
p.pack();
p.setVisible(true);
}
boolean isTestMode() {
return testing;
}
public class View extends JPanel {
@Override
public void paint(Graphics g) {
g.setColor(getBackground());
g.fillRect(getX(), getY(), getWidth(), getHeight());
g.setColor(getForeground());
Point vp = null, fp = null;
for (Point p: main) {
if (vp != null) g.drawLine(vp.x, vp.y, p.x, p.y);
else fp = p;
vp = p;
}
if (isTestMode()) {
g.drawLine(vp.x, vp.y, fp.x, fp.y);
Point p = getLastPoint();
if (p != null) {
g.drawLine(p.x - 2, p.y, p.x + 2, p.y);
g.drawLine(p.x, p.y - 2, p.x, p.y + 2);
}
}
}
}
}
- Pero
- Posts: 2161
- Joined: 24 Feb 2012, 09:12
Firma za koju sam radio imala je svoju vlastitu SCADU tada - ono softver za vizualizaciju postrojenja koji se upotrebljavao i za upravljanje sa posebnim custom rađenim modulima. Jedan kupac je iz ne znam kojih razloga imao potrebu za tim algoritmom. Napisao sam ga u C-u i vizualizirao na ekranu (nacrtao polinom i točku) čiji je SW također bio pisan u C-u - s dvije kućice - TRUE/FALSE. Nemam više pojma ni zašto je to trebalo, bilo je pred više od 20 godina.nodens » wrote:
A kako je radio? Ako nije prekomplicirano za objasnit...